什么是:
?它是一个中缀值构造函数吗?
它的定义是什么?
我无法找到:
的源代码。
另外,[ ]
是什么?
将[1]
定义为简单
代数数据类型?如果是,怎么样?
是否像data [a] = a:[ ] | [ ]
?
这只是我的猜测。我不确定。
:
和[ ]
的源代码是什么?
这些构造是否硬编码到编译器中?
让我们将:
称为cons
,将[ ]
称为Nil
。使用这些名称,您如何在Haskell中实现等效的:
和[ ]
?
答案 0 :(得分:4)
:
是一个List构造函数。
λ> :t (:)
(:) :: a -> [a] -> [a]
λ> 3 : [2,4]
[3,2,4]
1:[]
和[1]
是相同的。在第一种形式中,您已应用函数:
来创建[1]
。
[]
用于表示空列表。 []
的另一种用法是作为类型构造函数。这用于创建Applicative
等实例
实际上,当你写[1,2,3]
之类的东西时,它是1:2:3:[]
的语法糖。
感谢@ManuelEberl,您可以找到来源here.
您可以使用Cons
和Nil
创建自己的列表,如下所示:
data MyList a = Nil | Cons a (MyList a) deriving (Show)
它只需要一个递归结构来定义它。一些演示:
λ> Cons 3 Nil
Cons 3 Nil
λ> Cons 3 (Cons 3 Nil)
Cons 3 (Cons 3 Nil)
让我创建一个名为constructMyList
的函数,它类似于:
:
constructMyList :: a -> MyList a -> MyList a
constructMyList x y = Cons x y
它的演示:
λ> let a = Cons 2 (Cons 3 Nil)
λ> constructMyList 1 a
Cons 1 (Cons 2 (Cons 3 Nil))