Jul. 10th, 2014

orleanz: (main)
Оригинал взят у [livejournal.com profile] taki_net в Пацталом

orleanz: (Default)
Почему телевидение не применяет?


Запись сделана с помощью m.livejournal.com.

orleanz: (main)
В качество изучения Хаскелла, запрограммировал простую задачу с интервью - дан массив чисел, найти первое число которое присутствует более чем один раз в массиве. Чисто в функциональном стиле, с фолдами и фильтрами!

Пришлось поматериться по пути. Всё-таки чисто функциональный язык это нехилый геммор, надеюсь, только поначалу.
Как вам код, выглядит логичным? Или нифига не выразительный?



если кому надо в текстовом виде, см. ниже

import qualified Data.Map as Map
import qualified Data.Set as Set

main = do
print $ if (t4 >= length ar) then "not found" else show $ ar !! t4
where t4 = length $ takeWhile (\x -> not(Set.member x t3)) ar -- index of first repeating
t3 = Set.fromList $ map (\(x,_) -> x) t2 -- repeating entries now are in set object
t2 = filter (\(_,y) -> y > 1) $ Map.toList t1 -- filtered repeating entries
t1 = foldr (\k m -> Map.insertWith (+) k 1 m) Map.empty ar -- dictionary of frequencies
ar = [1,2,3,55,77,2,3,1] -- input data

Profile

orleanz: (Default)
orleanz

December 2018

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 14th, 2025 05:26 am
Powered by Dreamwidth Studios