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

时间:2014-10-16 14:56:23

标签: list haskell syntax

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

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

p [x, xs] = x * product xs

我可以理解这一点,这意味着获取列表的乘积,然后将其乘以x的值。

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

p (x : xs) = x * product xs

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

2 个答案:

答案 0 :(得分:5)

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

x : xs是一个包含至少一个元素的列表。它的第一个元素称为x,包含其余元素的列表称为xs

答案 1 :(得分:4)

:是cons运算符,它将一个元素附加到列表

(x : xs)将列表匹配到元素x和列表的其余部分xs

让我们举一个具体的例子:

l = [1,2,3]

show_rest_of_list (x:xs) = xs

show_rest_of_list l
-- would return [2,3]

play_with_list (x:xs) = x : x : xs

play_with_list l
-- would return [1,1,2,3]