haskell列表语法中的冒号与括号

it2*_*229 1 syntax haskell list

我正在学习haskell然后我来参加这个练习,我必须定义一个能够得到数字列表产品的函数.我被提供了选择,因为我是haskell的新手,有一些我不太清楚的符号.

所以我在其中一个选择中看到了这个定义:

p [x, xs] = x * product xs
Run Code Online (Sandbox Code Playgroud)

我可以理解这一点,它意味着得到列表的乘积,然后乘以x的值.

然后我在另一个选择中看到了另一个定义:

p (x : xs) = x * product xs
Run Code Online (Sandbox Code Playgroud)

我完全不明白.它使用括号和冒号,我很难找到它们的定义.如果有人可以通过语法和语义来启发我,我感激不尽.

sep*_*p2k 5

[x, xs]是包含两个元素的列表.调用第一个元素,调用x第二个元素xs.所以在这种情况下product xs不计算列表的乘积,它计算第二个元素的乘积.由于列表的元素本身不能是列表(或者乘以x不起作用),这是一个类型错误.

x : xs是一个包含至少一个元素的列表.调用它的第一个元素,并调用x包含其余元素的列表xs.