在Haskell中缩短函数

时间:2014-12-16 09:12:34

标签: haskell

是否可以在此函数中取消变量x?:

numocc x = map (length.filter(==x))

例如,如果我有这个功能:

numocc x l = map (countt x) l

我可以取消变量l并得到这个:

numocc x = map (countt x)

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

你可以使用" pointfree"程序来回答这样的问题

> pointfree "numocc x = map (length . filter (==x))"

numocc = map . (length .) . filter . (==)

修改

这里正在行动

> let numocc x = map (length . filter (==x))
> let numocc' = map . (length .) . filter . (==)

numocc 'a' ["aa", "bb"] --outputs [2, 0]
numocc' 'a' ["aa", "bb"] --also outputs [2, 0]

基本上,它计算param2列表项中每个元素中param1的数量

numocc 'a' ["aa", "bba"] --outputs [2, 1]
numocc' 'a' ["aa", "bba"] --also outputs [2, 1]