作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
foldl :: (a -> b -> a) -> a -> [b] -> a
foldl step zero (x:xs) = foldl step (step zero x) xs
foldl _ zero [] = zero
foldl (+) 0 (1:2:3:[])
foldl (+) (0 + 1) (2:3:[])
foldl (+) ((0 + 1) + 2) (3:[])
foldl (+) (((0 + 1) + 2) + 3) ([])
foldl (+) (((0 + 1) + 2) + 3)
最佳答案
a
表示累加器值的类型,b
表示输入中每个元素的类型。 (a -> b -> a)
是一个函数,它接受一个累加器值,列表中的某个项目,并返回一个可以传递到下一步的新累加器值。
初始值的类型必须是a
以便函数的第一次调用可以接收累加器值。累加器函数必须采用 a
并返回 a
以便可以将累加器值传递给折叠的每个步骤。折叠的最终值必须是 a
,因为这是最终调用 fold 函数将返回的累加器的类型。(a -> b -> c) -> a -> [b] -> c
不能表示折叠,因为折叠函数不采用 c
.折叠函数的输入和输出必须是相同的类型,这样累加器才能传递到下一个折叠步骤。
让我们看一个例子,如果 fold 函数返回 c
会发生什么。 .
f :: Integer -> Integer -> Bool -- this is a valid (a -> b -> c)
f acc n = (acc + n) > 0
f
进行折叠.运行时会发生什么?
foldl f 0 [1] ~ (0 + 1) > 0 == True :: Bool
foldl f 0 [1, 2] ~ ((0 + 1) > 0) + 2) > 0 == error - no instance of (+) for Bool
\_________/ \
| \
Bool + Integer
关于haskell - 不清楚 foldl 类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14768628/
MVC3 中的助手是否在 Controller 和 View 中使用? 助手是放置常用 Controller 方法的正确位置吗? 我想创建一个通用方法来获取数据库中的所有子子 ID,并确保它位于正确的
有人可以阐明这两者之间的区别吗,因为它们存在于执行上下文中?我很难阅读 ECMA 262 v 5规范并清楚地看到差异。 谢谢你, 最佳答案 两者都是执行上下文的组件(相同类型),但它们有不同的用途(f
我是一名优秀的程序员,十分优秀!