是什么squares xs = [x*x|x<-xs]
意思。
就像我理解的那样[x*x|x<-[1,2,3]]
。
准确地说,s
从哪里来xs
?
是什么squares xs = [x*x|x<-xs]
意思。
就像我理解的那样[x*x|x<-[1,2,3]]
。
准确地说,s
从哪里来xs
?
xs
是传递给squares
函数的列表参数。通常,s
在 haskell 中的变量名称之后使用 an 来表示列表(IE,将名称复数以表示参数中的多个值)。
根据菲利普瓦尔德的说法,这份名单是一种只有头和尾巴的奇怪动物。尾巴由头和尾组成,依此类推,直到它为空。
例如对于函数:
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]
xs
只是一个变量(传递给的参数squares
)。在您的第二个示例中,您刚刚替换xs
为[1,2,3]
.