[英]What is the difference between 1:[ ] and [1]? How would you implement : and [ ] in Haskell?
什么是:
? 是infix值构造函数吗?
它的定义是什么?
我找不到真正的源代码:
。
另外, [ ]
什么?
[1]
定义为简单的代数数据类型? 如果是,怎么办?
是否类似于data [a] = a:[ ] | [ ]
data [a] = a:[ ] | [ ]
?
这只是我的猜测。 我不确定。
:
和[ ]
的源代码是什么?
这些构造是否被硬编码到编译器中?
让我们称呼为:
作为cons
, [ ]
为Nil
。 使用这些名称,您将如何在Haskell中实现等价于:
和[ ]
?
:
是List的构造函数。
λ> :t (:)
(:) :: a -> [a] -> [a]
λ> 3 : [2,4]
[3,2,4]
1:[]
和[1]
相同。 在第一种形式中,您已经应用了函数:
创建[1]
。
[]
用于表示空列表。 []
另一种用法是用作类型构造函数。 这用于创建Applicative
等的实例。
实际上,当您编写类似[1,2,3]
,它是1:2:3:[]
的语法糖。
您可以使用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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.