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