什么是: 是infix值构造函数吗?

它的定义是什么?

我找不到真正的源代码:

另外, [ ]什么?

[1]定义为简单的代数数据类型? 如果是,怎么办?

是否类似于data [a] = a:[ ] | [ ] data [a] = a:[ ] | [ ]

这只是我的猜测。 我不确定。

:[ ]的源代码是什么?

这些构造是否被硬编码到编译器中?

让我们称呼为:作为cons[ ]Nil 使用这些名称,您将如何在Haskell中实现等价于:[ ]

===============>>#1 票数:4 已采纳

:是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))

  ask by jhegedus translate from so

未解决问题?本站智能推荐:

3回复

haskell中的seq和$有什么区别?

我无法理解seq和$的区别, seq强制执行求值, $也做同样的事情。
3回复

有什么区别++和:在haskell中?

我不明白 - 为什么不回归“hithere”?
5回复

您将如何在Haskell中表示图形(与旅行商问题相关的图形)

在haskell中表示一棵树很容易: 但那是因为它不需要命令式样式“指针”的概念,因为每个Node / Leaf都有一个,只有一个父节点。 我想我可以将它表示为Maybe Int s的列表列表...为那些没有路径的节点创建一个Nothing表,而对于那些那些做的人来说Just n ..
2回复

你将如何(重新)在Haskell中实现迭代?

(你可能知道) iterate是一个函数,它接受一个函数和起始值。 然后它将函数应用于起始值,然后将相同的函数应用于最后的结果,依此类推。 结果是一个无限的列表。 (这就是我使用take的原因)。 我的问题是如何在Haskell中实现自己的iterate'函数,只使用基础知识(
1回复

如何在Haskell中实现++?

嗨,我是Haskell编程的新手。 我正在尝试自己实现运算符“++”。 这是我写的一个小程序,但它不起作用: 我收到了很多关于[a],[[a]]和[[[a]]]的类型错误。 关于Haskell中的列表类型仍然令人困惑。 有人可以帮助我吗? 谢谢。 :)
2回复

Clojure中的mapcat和Haskell中的concatmap有什么区别?

在Clojure中,你在Clojure中有一个名为mapcat的函数,它与Scala中的flatmap有一些相似之处。 它用于将函数映射到列表并返回列表。 在Haskell中,我们有一个函数ConcatMap ,它的名字看起来非常相似 。 我的问题是 - Clojure中的mapc
3回复

Rust中的特征与Haskell中的类型类有什么区别?

Rust中的特性至少在表面上看起来类似于Haskell中的类型类 ,但是我看到人们写道它们之间存在一些差异。 我确切地想知道这些差异是什么。
3回复

haskell中forM和forM_有什么区别?

HLint建议我使用forM_而不是forM 。 为什么? 我看到他们有不同类型的签名,但没有找到一个很好的理由使用一个而不是另一个。
2回复

Haskell中的[[Char]]和[Char]有什么区别?

为什么需要在此功能中使用[[]]? 说明:该函数反转字符串上的所有元素。
4回复

在Haskell中liftM和mapM有什么区别

liftM和mapM有什么区别?