首页 > 解决方案 > 如何在haskell的列表中使用高阶函数?

问题描述

我正在自己学习haskell,我对如何学习有很多疑问

[f x | ......]

作品。例如我有这个表达式:

[ f x | f<- [(+1),(*2),(3-)], x<-[1..(f 1)]]

它返回:

[2,3,2,4,2,1]

但是我真的不明白这个结论是怎么得出的。

有人可以帮我解释一下吗?我已经多次阅读文档,但我不明白。

谢谢!

标签: haskell

解决方案


f <- [(+1), (*2), (3-)]

f说“从列表中选择任何值”。

x <- [1..(f 1)]

说“x从列表中选择任何一个[1..f 1],因为f我们已经选择了”。如果f被选为例如。(3-)在步骤 1 中,此列表将为[1,2].

[ f x | ... ]

说“为我们之前选择的和f x在输出列表中产生值”,例如。如果和,那么我们包括在列表中。这恰好是您作为输出获得的列表中的最终值。fxf = (3-)x = 2f x = 3 - 2 = 1

这对所有fx组合都完成,直到我们得到最终输出。


下图说明了组合如何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在输出中。


推荐阅读