当前位置: 首页 > 知识库问答 >
问题:

在Haskell中列表是归纳的还是共归纳的?

饶志
2023-03-14
codata HList : Type -> Type where
    Nil : HList a
    Cons : a -> HList a -> HList a

HList是共感的吗?如果是,一个共感类型如何包含有限值?

如果我们定义数据hlist'a=L(List a)R(Stream a)呢?这会被认为是什么和/或它会比hlist有用吗?

共有1个答案

钱均
2023-03-14

>

  • 由于懒惰,Haskell类型既有归纳法也有同归法,或者,在数据和同归法之间没有正式的区别。所有递归类型都可以包含构造函数的无限嵌套。在Idris、Coq、Agda等语言中,终止检查器拒绝ones=1:ones这样的定义。懒惰意味着one可以一步计算为1:one,而其他语言只计算为标准形式,而one没有标准形式。

    “共归纳”并不意味着“必然无限”,它的意思是“由它如何被解构而定义”,而归纳的意思是“由它如何被构造而定义”。我认为这是对细微差别的极好解释。你肯定会同意

    codata A:键入MkA:A

  •  类似资料:
    • 问题 你有一个对象数组,想要把它们归纳为一个值,类似于 Ruby 中的 reduce() 和 reduceRight() 。 解决方案 可以使用一个匿名函数包含 Array 的 reduce() 和 reduceRight() 方法,保持代码清晰易懂。这里归纳可能会像对数值和字符串应用 + 运算符那么简单。 [1,2,3,4].reduce (x,y) -> x + y # => 10 ["wo

    • 任何归纳类型都是这样定义的 具有类型。对此有一个双重概念,叫做共感应。 具有类型。注意和是如何对偶的。作为归纳和共归纳数据类型的示例,请看这个函式。 总是,也是如此。 我们可以使用从和生成。 这也是每次我们获得一个元素时,总共。 我的问题是,如果不使用递归(直接或间接),我们能否在时间内将转换为? 我知道如何使用递归(将转换为,然后将转换为(初始转换是,但随后)中的每个元素都是,使得第二次转换to

    • 计算机的威力源自其反复执行同一任务或同一任务不同版本的能力。在计算领域,迭代这一主题会以多种形式出现。数据模型中的很多概念(比如表)都是某种形式的重复,比如“表要么为空,要么由一个元素接一个元素,再接一个元素,如此往复而成”。使用迭代,程序和算法可以在不需要单独指定大量相似步骤的情况下,执行重复性的任务,如“执行下一步骤1000次”。编程语言使用像C语言中的while语句和for语句那样的循环结构

    • 我试图编写一个递归函数,它将包含整数列表的列表作为输入,并返回类型为([Int],Int]的元组。([Int],Int) 这是为“棋盘游戏”提供的,其中提供了一个棋盘: 这将是一个4行5列的电路板。列表中的数字是“硬币价值”。这个棋盘游戏的目标是从列表的顶部到底部收集硬币。你可以从最上面一排的任何位置开始,然后向下移动,你可以直接向下移动,也可以对角向左或向右移动。你需要的路径将为你提供最大的总硬

    • 数学归纳法 数学归纳法(mathematical induction)是一种数学证明方法,常用于证明命题(命题是对某个现象的描述)在自然数范围内成立。随着现代数学的发展,自然数范围内的证明实际上构成了许多其他领域(比如数学分析)的基础,所以数学归纳法对于整个数学体系至关重要。 数学归纳法本身非常简单。如果我们想要证明某个命题对于自然数n都成立,那么: 第一步 证明命题对于n = 1成立。 第二步

    • 本文向大家介绍java数学归纳法非递归求斐波那契数列的方法,包括了java数学归纳法非递归求斐波那契数列的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java数学归纳法非递归求斐波那契数列的方法。分享给大家供大家参考。具体如下: Integer能表示的最大值为 2147483647 大概是21.4亿,这里没有考虑溢出情况(当size为983时就会溢出)! 希望本文所述对大家的jav