我正在阅读A Gentle Introduction to Haskell(这不是那么温和)并且它反复使用:
运算符而不直接解释它的作用。
那么,究竟是做什么的呢?
答案 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)
它是列表的类型构造函数。它与Just
或Left
之类的任何其他类型构造函数没有什么不同,除了它是中缀。有效类型构造函数可以是以大写字母开头的单词,也可以是以冒号开头的符号。
因此,您可以为自己的数据类型定义中缀构造函数。例如:
data MyList a = a :> MyList a
| Empty
在上面的代码中,我们定义了一个名为MyList
的类型,它有两个构造函数:第一个是一个奇怪的构造函数:>
,它接受一个元素和另一个MyList a
;第二个是空构造函数Empty
,相当于Haskell本地列表中的[]
。
以上相当于:
data MyList a = Cons a (MyList a)
| Empty