Haskell ::在递归中使用括号

Sir*_* DK 1 recursion haskell

我只是想知道,对于递归示例:

squaresRec :: [Double] -> [Double]   
squaresRec [] = []                       
squaresRec (x:xs) = x*x : squaresRec xs
Run Code Online (Sandbox Code Playgroud)

为什么在递归的情况下,没有括号?不应该假设是这样的:

squaresRec :: [Double] -> [Double]   
squaresRec [] = []                       
squaresRec [x:xs] = x*x : squaresRec xs
Run Code Online (Sandbox Code Playgroud)

我知道这不行.但只是想知道背后的解释.

lef*_*out 5

[] 匹配空列表.

[1]匹配一个只包含一个元素的列表,该列表必须是一个等于1的数字.请注意,这[1]实际上是语法糖(1:[]),即它真正匹配的是:以数字开头的列表1,后跟一个空的列表......这只是一种复杂的说法"包含单个元素的列表1".

(x:xs)匹配以x,后跟xs(并且可能包含任意数量的元素,可能为零)的列表.即,此模式匹配具有至少一个元素的任何列表.

[x:xs]再配其中包含一个列表正好一个元素,该元素应该匹配模式(x:xs).(即使是类型也没有意义,因为你的列表包含Double--numbers,而不是列表.)

  • 括号不是元组构造函数.他们在这里孤立几个`,`(逗号),它们是真正的元组构造者 (2认同)