什么:中缀运算符在Haskell中做什么?

时间:2009-11-08 14:45:59

标签: haskell

我正在阅读A Gentle Introduction to Haskell(这不是那么温和)并且它反复使用:运算符而不直接解释它的作用。

那么,究竟是做什么的呢?

4 个答案:

答案 0 :(得分:70)

:是“prepend”运算符:

x : xs

返回一个列表,其中x为第一个元素,后跟xs中的所有元素。在其他函数式语言中,这通常称为cons,因为它“cons”通过从空列表重复应用来递归地填充列表:

1 : 2 : 3 : 4 : []

是列表[1, 2, 3, 4]

答案 1 :(得分:22)

总是可以查看GHCi / HUGS中的类型,因为本教程的第一步鼓励您下载GHC / HUGS。

Prelude> :t (:)
(:) :: a -> [a] -> [a]
Prelude> :t (++)
(++) :: [a] -> [a] -> [a]

从各自的类型来看,很容易推断出它们的用法。

PS:http://haskell.org/hoogle/太棒了。

答案 2 :(得分:14)

Haskell中的:运算符是列表的构造函数。它是'缺点'在冒号之前的任何内容之后指定的列表。

例如,整数列表是通过将每个数字“提供”到空列表中来实现的,例如;

列表[1,2,3,4] 可以如下构建:

  • 4 : [](将4列入空名单)
  • 3 : [4](将3列入包含4的列表)
  • 2 : [3,4](将2列入包含3,4的列表)
  • 1 : [2,3,4](将1放入包含2,3,4的列表中)

给你;

[1,2,3,4]

完全写完了;

1 : 2 : 3 : 4 : []

答案 3 :(得分:10)

它是列表的类型构造函数。它与JustLeft之类的任何其他类型构造函数没有什么不同,除了它是中缀。有效类型构造函数可以是以大写字母开头的单词,也可以是以冒号开头的符号。

因此,您可以为自己的数据类型定义中缀构造函数。例如:

data MyList a = a :> MyList a
              | Empty

在上面的代码中,我们定义了一个名为MyList的类型,它有两个构造函数:第一个是一个奇怪的构造函数:>,它接受​​一个元素和另一个MyList a;第二个是空构造函数Empty,相当于Haskell本地列表中的[]

以上相当于:

data MyList a = Cons a  (MyList a)
              | Empty