(f。)做什么?在Haskell中是什么意思?

我已经看到许多根据模式定义的功能(f .) . g。例如:


countWhere = (length .) . filter

duplicate  = (concat .) . replicate

concatMap  = (concat .) . map

这是什么意思?


神不在的星期二
浏览 649回答 3
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

从来没有提到过,pointpoint风格在任何方面都更具可读性或更好。我唯一提到“可读”一词是与tac示例结合使用的。我同意,人们可以通过无点编程来摆脱困境。mf用无点样式编写的函数就是这种形式的典范。但是,从数学的角度研究无点编程风格还是很有趣的,因为它使程序的结构在数学上更易于处理。它可以使您的代码更短,但是容量有限。
打开App,查看更多内容
随时随地看视频慕课网APP