假设我们有一个列表haskell如何从另一个列表创建一个新列表?
x = [1..10]
,我们打算以这种方式使用它来创建另一个列表Y:
y= [a|a<-x]
因此,尽管从x
创建列表y
,它访问的x
每个元素(从1到10)并以相同的顺序将其插入y
。由于haskell中的列表是单链表,我们只能在它的头部插入一个新元素。所以首先插入1到[]
&我们有[1]
。然后它插入2到它的头&,所以我们有[2,1]
。然后它插入3 &我们有[3,2,1]
&等等。所以最终我们应该得到y
作为[10,9..1]
。但相反,我们得到y
为[1..10]
。为什么?
这是一个很好的解释如何desugar list comprehension语法:http://stackoverflow.com/a/8029698/1013393 – sjakobi