Jul. 10th, 2014
квадрокоптеры над футбольным полем?
Jul. 10th, 2014 07:45 amПочему телевидение не применяет?
Запись сделана с помощью m.livejournal.com.
Хаскель-мучитель
Jul. 10th, 2014 03:11 pmВ качество изучения Хаскелла, запрограммировал простую задачу с интервью - дан массив чисел, найти первое число которое присутствует более чем один раз в массиве. Чисто в функциональном стиле, с фолдами и фильтрами!
Пришлось поматериться по пути. Всё-таки чисто функциональный язык это нехилый геммор, надеюсь, только поначалу.
Как вам код, выглядит логичным? Или нифига не выразительный?

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

если кому надо в текстовом виде, см. ниже
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