26得票3回答
Haskell中的教堂列表

我需要实现Haskell的map函数,使其能够与Church列表一起使用。Church列表定义如下: type Churchlist t u = (t->u->u)->u->u 在λ演算中,列表被编码如下: [] := λc. λn. n [1,2,3] := ...

10得票3回答
寻找一个使用 Church 编码(λ演算)来定义 <、> 和 != 的方法。

我需要创建一些Lambda函数来处理 &gt;, &lt; 和 !=,但我不知道该如何操作,是否有人能帮助我?PS:我们刚开始学习Lambda演算,请不要假设任何先前的知识。谢谢提前! 编辑 - 我的意思是使用lambda演算实现Lambda演算中的算术运算 编辑2 - 更准确地说:寻找一个C...

14得票3回答
能否在不破坏等式推理的情况下使用 Church 编码?

请注意这个程序: {-# LANGUAGE RankNTypes #-} import Prelude hiding (sum) type List h = forall t . (h -&gt; t -&gt; t) -&gt; t -&gt; t sum_ :: (Num a) =...

10得票2回答
为什么差异列表不是可折叠类型的实例?

dlist包 包含了 DList 数据类型,它有很多的实例,但没有 Foldable 或者 Traversable。在我看来,这两个类是最类似“列表”的类。是否有性能原因使得 DList 不是这些类的实例呢? 此外,该包确实实现了 foldr 和 unfoldr 但没有其他的折叠函数。

14得票1回答
教会编码的实际原因

教堂编码(也称访问者模式)是一种将数据表示为函数的方法:不再使用常规的数据结构,而是使用函数表达数据。 data T = C1 F1 F2 | C2 F3 F4 您可以定义 data T = T (forall r. (F1 -&gt; F2 -&gt; r) -&gt; (F3 -&...

17得票2回答
Haskell中的Lambda演算:是否有一种方法使Church数在类型检查时通过?

我正在使用Haskell玩一些lambda演算的东西,具体来说是关于Church数。 我定义了以下内容: let zero = (\f z -&gt; z) let one = (\f z -&gt; f z) let two = (\f z -&gt; f (f z)) let iszer...

7得票2回答
在λ演算中编码二进制数值

我在lambda演算中没有看到任何关于二进制数字的提及。Church数是一元系统。 我曾在这里提出过如何在Haskell中实现此操作的问题:How to implement Binary numbers in Haskell 但即使我看到并理解了那个答案,我仍然不知道如何在纯无类型lambda...

18得票1回答
Coq中的“Error: Universe inconsistency”是什么意思?

我正在学习《软件基础》,目前在做关于“Church数”的练习。这里是自然数的类型签名:Definition nat := forall X : Type, (X -&gt; X) -&gt; X -&gt; X. 我已经定义了一个类型为 nat -&gt; nat 的函数 succ。现在我想这...

16得票2回答
为什么我们使用folds将数据类型编码为函数?

具体而言,为什么我们使用foldr来编码列表,使用迭代来编码数字? 抱歉我的介绍有些冗长,但我不知道如何命名我想要询问的东西,所以我需要先进行一些阐述。这主要参考了C.A.McCann的这篇文章,但它并没有完全满足我的好奇心,同时我也会略显地讲解rank-n-types和无限懒加载的问题。 ...

18得票3回答
使用教会数进行算术运算

我正在学习SICP,问题2.6让我陷入困境。在处理Church数字时,将0和1编码为满足某些公理的任意函数的概念似乎是有道理的。此外,使用零的定义和add-1函数导出单个数字的直接公式也是有道理的。但我不明白如何形成加法运算符。 到目前为止,我有这个。 (define zero (lamb...