作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我最近一直在阅读关于共归纳的文章,现在我想知道:Haskell 列表是归纳的还是共归纳的?我也听说 Haskell 不区分这两者,但如果是这样,他们是如何正式区分的?
列表以归纳方式定义,data [a] = [] | a : [a]
,但可以互感地使用,ones = a:ones
.我们可以创建无限列表。然而,我们可以创建有限列表。那么它们是什么?
相关的是 Idris,其中类型 List a
是严格的归纳类型,因此只是有限列表。它的定义类似于它在 Haskell 中的定义。但是,Stream a
是一个代数类型,建模一个无限列表。它被定义为(或者更确切地说,定义等同于)codata Stream a = a :: (Stream a)
.创建无限列表或有限流是不可能的。但是,当我写定义
codata HList : Type -> Type where
Nil : HList a
Cons : a -> HList a -> HList a
data HList' a = L (List a) | R (Stream a)
呢? ?会考虑什么和/或仅对 HList
有用吗? ? 最佳答案
ones = 1 : ones
被终止检查器拒绝。懒惰意味着ones
可以一步评估到 1 : ones
,而其他语言仅评估为标准形式,并且 ones
没有正规形式。 codata A : Type where MkA : A
HList
不同。 ,您永远无法“知道”它是有限的还是无限的(具体来说,如果列表是有限的,您可以在有限时间内发现,但您无法计算出它是无限的),HList'
为您提供了一种简单的方法来确定您的列表是有限的还是无限的。 关于haskell - Haskell 中的列表是归纳的还是归纳的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39854514/
我一直在阅读Practical Foundations for Programming Languages并发现迭代和同时归纳定义很有趣。我能够很容易地对偶函数和奇函数的相互递归版本进行编码 onli
我是一名优秀的程序员,十分优秀!