infix操作符在Haskell中做了什么?
我正在阅读Haskell的一个温柔的介绍 (它不是那么温和),并且它反复使用:操作符,而不直接解释它做了什么。
那么,它究竟做了什么?
:是“前置”操作符:
x : xs
返回一个列表,其中x为第一个元素,后面是xs的所有元素。 在其他函数式语言中,这通常称为cons ,因为它通过从空列表重复应用recursion地构造列表:
1 : 2 : 3 : 4 : []
是名单[1, 2, 3, 4] 。
可以随时查看GHCi / HUGS中的types,因为本教程的第一步鼓励您下载GHC / HUGS。
Prelude> :t (:) (:) :: a -> [a] -> [a] Prelude> :t (++) (++) :: [a] -> [a] -> [a]
从它们各自的types来看,推断它们的用法是相当容易的。
PS: http : //haskell.org/hoogle/真棒。
Haskell中的:运算符是列表的构造函数。 它将“冒险”之前的任何内容排除在指定的列表之后。
例如,一个整数列表是通过将每个数字“包括”到空列表中来完成的,例如,
列表[1,2,3,4]可以如下构造:
-
4 : [](将4列入空列表) -
3 : [4](包含3的列表包含4) -
2 : [3,4](将2列入包含2 : [3,4]的列表) -
1 : [2,3,4](包含2,3,4的列表1)
给你;
[1,2,3,4]
写得完全是这样;
1 : 2 : 3 : 4 : []
它是列表的types构造函数。 除了它是中缀之外,它与其他任何types的构造函数(如Just或Left )没有区别。 有效的types构造函数可以是以大写字母开头的单词,也可以是以冒号开头的符号。
所以你可以为你自己的数据types定义中缀构造函数。 例如:
data MyList a = a :> MyList a | Empty
在上面的代码中,我们用两个构造函数定义了一个名为MyList的types:第一个是看起来很古怪的构造函数:>它接受一个元素,另一个MyList a ; 第二个是空的构造函数Empty ,相当于Haskell本地列表中的[] 。
以上相当于:
data MyList a = Cons a (MyList a) | Empty