我自己学习haskell,我对如何
有很多疑问[f x | ......]
的工作原理。例如,我有这个表达式:
[ f x | f<- [(+1),(*2),(3-)], x<-[1..(f 1)]]
它返回:
[2,3,2,4,2,1]
但我真的不明白这个结论是怎么回事。
有人可以帮我解释一下吗?我已多次阅读文档,但我不明白。
谢谢!
答案 0 :(得分:4)
if let button2 = statusItem2.button {
button2.addSubview(statusBarView())
}
说&#34;选择f <- [(+1), (*2), (3-)]
&#34;的任何值从列表中。
f
表示&#34;从列表x <- [1..(f 1)]
中选择任何x
,对于我们选择的[1..f 1]
&#34;。如果f
被选为例如。在第1步中f
,此列表将为(3-)
。
[1,2]
表示&#34;在输出列表中为我们之前选择的[ f x | ... ]
和f x
&#34;生成值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
。