当前位置:  开发笔记 > 编程语言 > 正文

缺点和: - :在Haskell中意味着什么?

如何解决《缺点和:-:在Haskell中意味着什么?》经验,为你挑选了2个好方法。

在LYAHFGG中,有一章说该列表定义为:

data List a = Cons a (List a) deriving (Show, Read, Eq, Ord)

我理解除了缺点之外,大多数这意味着什么.当我尝试:t Cons:i Consghci我得到一个不在范围错误.在本章后面,它还讨论了: - 和它与Cons的相同之处

infixr 5 :-:  
data List a = Empty | a :-: (List a) deriving (Show, Read, Eq, Ord)  

但我真的不明白这:-:意味着什么.

在另一个资源中,在有关数据类型的部分中,它们定义以下数据类型:

data Expr = X
      | Const Int
      | Expr :+: Expr
      | Expr :-: Expr
      | Expr :*: Expr
      | Expr :/: Expr
      | IfZero Expr Expr Expr
      deriving (Eq, Ord)

在哪里IfZero p q r相同if p == 0 then q else r.这是一回事吗?我对这两个:意思是什么感到困惑,如果它是强制语法或只是样式选择.



1> chi..:
data List a = Cons a (List a) deriving (Show, Read, Eq, Ord)

我理解除了缺点之外,大多数这意味着什么.当我尝试:t Cons:i Consghci我得到一个不在范围错误.

您需要先使用data声明加载Haskell源文件,然后才能拥有Cons范围.或者,您也可以data直接在GHCi中输入该行.

对于严肃的代码,如果将其放入文件并加载它会更容易.这是因为学习过程通常涉及稍微修改文件,重新加载文件,在GHCi中尝试一些测试,再次修改文件等.在GHCi中执行此操作非常麻烦.

无论如何,Cons只是构造函数名称 - 它是一个任意名称.如果您愿意,可以使用data List a = Foobar a (List a) ....并命名Foobar.Cons这是一个历史名称,源自Lisp.

:-:是构造函数的另一个任意名称,除了它可以使用中.也就是说,而不是Cons 1 someList一个人可以写1 :-: someList.



2> pyon..:

:-:只是数据构造函数的中缀名称.你可以看到该data声明等同于

data List a = Empty | (:-:) a (List a)

从语义上讲,使用(:-:)or 之间没有区别Cons,但阅读起来要好得多

1 :-: 2 :-: 3 :-: 4 :-: Empty

比任何一个

Cons 1 (Cons 2 (Cons 3 (Cons 4 Empty)))

要么

1 `Cons` (2 `Cons` (3 `Cons` (4 `Cons` Empty)))

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有