← All posts tagged Haskell

fixpoint
Prolog Haskell Год назад видел в рассылке haskell-cafe такую задачу: есть два списка, ns :: [Int] и xs :: [T]. Нужно разбить список xs на подсписки длинами из ns. Т.е. takeList [2,1,3] "omgwtf" = ["om", "g", "wtf"]. К этой задаче приводили несколько решений разных уровней навороченности. Потом я линк на все это дело потерял, и вот наконец-то опять нашел. "Новичковское" решение выглядит так:

takeList [] _ = []
takeList _ [] = []
takeList (n : ns) xs = head : takeList ns tail
where (head, tail) = splitAt n xs

А самое продвинутое — вот так:

takeList = evalState . map (State . splitAt)

А на прологе (отсюда: kerneltrap.org ) — оказывается, можно даже вот так (устанавливается зависимость между исходным списком Xs, списком длин Ls и результатом — списком подсписков — Ps):

takeList(Xs,Ls,Ps) :- maplist(length,Ps,Ls), flatten(Ps,Xs).
fixpoint
clojure Haskell Оператор -> в Clojure позволяет записывать композицию функций даже короче чем . (точка) в Хаскелле.

Clojure: (-> value fn1 fn2 fn3 fn4 fn5)
Haskell: fn1 . fn2 . fn3 . fn4 . fn5 $ value
fixpoint
Java Haskell Думаю не написать ли транслятор хаскеллевских определений типов данных (data/type/newtype/class) в джаву. Потому что удобнее языка для описания структур данных я не видел.
fixpoint
Haskell programming Несмотря на неоспоримые достижения в теоретическом кодинге, хаскеллистам есть чему поучиться у джавистов на практике. Например, layout-ить код и устанавливать кодинг стандарты. Но ничего, это приходит с корпоративностью :)
fixpoint
Haskell programming Хаскель рулит! В джаве это было бы строк 10 как минимум:
f <- frame [text := "Hello!"]
quit <- button f [text := "Quit", on command := close f]
input <- entry f [text := "2+2"]
set f [layout := margin 6 $ row 6 [widget input, widget quit]]