为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

神不在的星期二 2019-11-14 09:13:02
我已经看到许多根据模式定义的功能(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可能在其他地方定义。)


查看完整回答
反对 回复 2019-11-14
?
catspeake

TA贡献1111条经验 获得超0个赞

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

查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 637 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信