2

是什么squares xs = [x*x|x<-xs]意思。

就像我理解的那样[x*x|x<-[1,2,3]]

准确地说,s从哪里来xs

4

3 回答 3

3

xs是传递给squares函数的列表参数。通常,s在 haskell 中的变量名称之后使用 an 来表示列表(IE,将名称复数以表示参数中的多个值)。

于 2013-10-04T13:54:38.043 回答
1

根据菲利普瓦尔德的说法,这份名单是一种只有头和尾巴的奇怪动物。尾巴由头和尾组成,依此类推,直到它为空。

例如对于函数:

squareRec :: [Integer] -> [Integer]
squareRec [] = []
squareRec (x:xs) = x*x : squareRec xs

该解决方案的工作原理如下:

squareRec[1,2,3]
= squareRec(1 : (2 : (3 : [])))
= 1*1 : squareRec(2 : (3 : []))
= 1*1 : (2*2 : squareRec(3 : []))
= 1*1 : (2*2 : (3*3 : squareRec []))
= 1*1 : (2*2 : (3*3 : []))
= 1 : (4 : (9 : []))

这里头部是x(一个元素),尾部是列表的其余部分(这是一个列表)。返回的列表在函数中传递squareRec,而我们得到一个空列表,定义为squareRec [] = []

我们知道1:(4:(9:[])) = [1,4,9]

于 2013-10-04T16:16:06.777 回答
0

xs只是一个变量(传递给的参数squares)。在您的第二个示例中,您刚刚替换xs[1,2,3].

于 2013-10-04T13:54:03.950 回答