我是一名Haskell初学者,我一直在玩无点功能。我有两个函数的问题 - lambdabot的解决方案是绝对不可读的,并且使代码变得混乱,所以我在这里问,以便有方法来简化函数。使Haskell函数免于点
第一个函数从列表中删除重复项。
func1 :: Eq a => [a] -> [a]
func1 [] = []
func1 (x:xs) = x : (func1 . filter (/=x) $ xs)
我试图使这一功能的免费点版本foldr
和>>=
,但没有成功。
第二个函数将列表映射到包含原始元素的元组列表以及它们在列表中发生的频率。
func2 :: Eq a => [a] -> [(a, Int)]
func2 xs = map (\f -> (f, count f xs)) xs
其中count a = length.filter(==a)
。我不确定是否可以在保持可读性的同时制作此函数的免费版本,但我想确保。
任何帮助使这两个功能点免费将不胜感激。