我已经看到许多根据模式定义的功能(f .) . g。例如:countWhere = (length .) . filterduplicate = (concat .) . replicateconcatMap = (concat .) . map这是什么意思?
3 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
这是一个品味问题,但是我发现这种风格令人不愉快。首先,我将描述它的含义,然后,提出一个我更喜欢的替代方法。
你需要知道,(f . g) x = f (g x)和(f ?) x = f ? x任何运营商?。由此我们可以推断出
countWhere p = ((length .) . filter) p
= (length .) (filter p)
= length . filter p
所以
countWhere p xs = length (filter p xs)
我更喜欢使用一个叫做 .:
(.:) :: (r -> z) -> (a -> b -> r) -> a -> b -> z
(f .: g) x y = f (g x y)
然后countWhere = length .: filter。我个人觉得这很清楚。
(.:也Data.Composition可能在其他地方定义。)
catspeake
TA贡献1111条经验 获得超0个赞
从来没有提到过,pointpoint风格在任何方面都更具可读性或更好。我唯一提到“可读”一词是与tac示例结合使用的。我同意,人们可以通过无点编程来摆脱困境。mf
用无点样式编写的函数就是这种形式的典范。但是,从数学的角度研究无点编程风格还是很有趣的,因为它使程序的结构在数学上更易于处理。它可以使您的代码更短,但是容量有限。
添加回答
举报
0/150
提交
取消