haskell - 如何在haskell的列表中使用高阶函数?
问题描述
我正在自己学习haskell,我对如何学习有很多疑问
[f x | ......]
作品。例如我有这个表达式:
[ f x | f<- [(+1),(*2),(3-)], x<-[1..(f 1)]]
它返回:
[2,3,2,4,2,1]
但是我真的不明白这个结论是怎么得出的。
有人可以帮我解释一下吗?我已经多次阅读文档,但我不明白。
谢谢!
解决方案
f <- [(+1), (*2), (3-)]
f
说“从列表中选择任何值”。
x <- [1..(f 1)]
说“x
从列表中选择任何一个[1..f 1]
,因为f
我们已经选择了”。如果f
被选为例如。(3-)
在步骤 1 中,此列表将为[1,2]
.
[ f x | ... ]
说“为我们之前选择的和f x
在输出列表中产生值”,例如。如果和,那么我们包括在列表中。这恰好是您作为输出获得的列表中的最终值。f
x
f = (3-)
x = 2
f x = 3 - 2 = 1
这对所有f
和x
组合都完成,直到我们得到最终输出。
下图说明了组合如何f
产生x
输出。
[ 2 , 3 , 2 , 4 , 2 , 1 ]
x=1 x=2 x=1 x=2 x=1 x=2
f=(+1) f=(*2) f=(3-)
将其阅读为自下而上的选择:我们选择f
,然后选择x
,然后包含f x
在输出中。
推荐阅读
- syntax-error - 如何索引 ZIMPL 中的子集集?
- python - 有人可以解释一下这个 Python 代码吗?
- angular - 如何将数据共享到 Angular 中的另一个组件?
- python - PostgreSQL 使用单个脚本分两个阶段导入 CSV 文件 (psycopg2)
- python - 如何在 Python 中绘制数据透视表?
- python - 如何在 Python 中的另一个方法中调用方法变量
- python-3.x - 返回函数中的“或”如何用于此特定代码
- javascript - 如何将数组对象转换为数组数组?
- c++ - 有没有其他方法可以为指针变量分配地址?
- reactjs - 如何将 Chessboard.js 与 Reactjs 一起使用?