【发布时间】:2016-01-02 09:25:38
【问题描述】:
要使用折叠器计算列表的长度,可以执行以下操作:
foldr (\_ acc -> acc + 1) 0
进一步扩展折叠函数需要增加第二个参数的想法,我想出了这个(这是错误的):
foldr ((+1) . (flip const)) 0`
对类型的进一步检查揭示了这一点:
(+1) . (flip const) :: Num (c -> c) => a -> c -> c
Haskell higher order function to calculate length 该页面上有一条有趣的评论,我真的无法理解
foldr (((+1).).(flip const)) 0
有人能解释一下这个组合是如何工作的吗?
【问题讨论】:
-
这看起来像是用一些工具生成的,比如pointfree....
(+1) . (flip const)基本上意味着为这个函数的每个应用程序添加一个,不管第一个参数是什么(这就是翻转const 在那里)。就像(\a b -> (b+1))