繁体   English   中英

1:[]和[1]有什么区别? 您将如何在Haskell中实现:和[]?

[英]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:[]的语法糖。

感谢@ManuelEberl,您可以在这里找到源代码

您可以使用ConsNil创建自己的列表,如下所示:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM