mam następujące funkcje w HaskellJak mogę ponownie napisać funkcję Haskell z dwóch argumentów punkt-free style
agreeLen :: (Eq a) => [a] -> [a] -> Int
agreeLen x y = length $ takeWhile (\(a,b) -> a == b) (zip x y)
Próbuję nauczyć się pisać „idiomatyczne” Haskell, które wydają zamiast nawiasów preferowane jest używanie .
i $
, a także, w miarę możliwości, preferowanie kodu bezbłędnego. Po prostu nie mogę pozbyć się wyraźnego wymieniania x
i y
. Jakieś pomysły?
Myślę, że miałbym ten sam problem z wyrażeniem dowolnej funkcji dwóch argumentów.
BTW, to tylko w dążeniu do pisania dobrego kodu; nie niektóre "wykorzystują wszystko, aby uczynić go bezwzrokowym" ćwiczenia domowe.
Dzięki.
(Dodano komentarz) Dzięki za odpowiedzi. Przekonałeś mnie, że ta funkcja nie korzysta z systemu pointfree. Dałeś mi także kilka świetnych przykładów na ćwiczenie transformacji ekspresji. Jest to nadal trudne dla mnie, i wydają się być niezbędne do Haskell jako wskaźniki są na C
Uważam, że hlint (http://community.haskell.org/~ndm/darcs/hlint/hlint.htm) jest bardzo cenny, pomagając mi nauczyć się innych sposobów pisania wyrażeń, w tym używania. i $. – mhwombat