我尝试更好地学习Y组合器(在Scheme中我有些理解),并在D 2.0中实现它,但失败得相当惨: auto fact = delegate(uint delegate(uint) recurse) { return delegate(uint n) { ret...
我希望你们一切都好。我正在用Harbour实现定点Y组合子,但是在此过程中遇到了一些问题。Y组合子可以由lambda演算定义为: Y = (λh.λF.F(λ x.((h(h))(F))(x))) (λh.λF.F(λ x.((h(h))(F))(x))) 我正在尝试通过记忆化与Y组合子来...
一个纯λ函数是一个只有抽象和应用的术语。在JavaScript中,通过将所有抽象应用于收集其参数列表的变量函数,可以推断出纯函数的源代码。也就是说,这是可能的: lambdaSource(function(x){return x(x)}) == "λx.(x x)" 请查看此gist上l...
我正在学习lambda演算,使用Greg Michaelson的书“通过Lambda演算介绍函数式编程”。 我使用Clojure实现示例,仅使用语言的子集。我只允许: 符号 单参数lambda函数 函数应用 方便起见的变量定义。 到目前为止,我已经使这些函数工作: (def ide...
I know that: (cons [p] [q]) is ((s ((s i) (k [p]))) (k [q])) (car [lst]) is ([lst] k) (cdr [lst]) is ([lst] (k i)) 我想写一个像这样的列表 (cons [a] (cons ...
我正在学习λ演算,但我似乎无法理解数字0的编码。 “接受一个函数和第二个值,并在参数上零次应用该函数的函数”如何表示零?还有其他编码零的方式吗?有人可以帮我编码0吗?
我目前正在学习Haskell,并参加大学的一门相当理论的函数式编程课程。 我知道这是纯理论/学术问题,但我仍然想知道如何用纯lambda演算(即没有定义任何常量)简单地表示不同的简单函数。 我的一些讲座材料定义了布尔值: True = \xy.x False = \xy.y (...
我不明白为什么在无类型 lambda 演算中允许以下 beta 规约: (λx.x y) (u v) -> ((u v) y) 具体来说,我不理解如何将两个参数u和v传递给单个参数x在λx.x部分中。 为了允许上述操作,我应该使用柯里化并拥有两个参数吗?像这样— (λx.(λy....
我正在尝试理解λ演算与C ++中的λ表达式之间的联系。 首先,在未经类型化的λ演算中,我们没有布尔值、整数或任何基本值,因此所有内容都必须编码为函数,然后我们可以将任何项应用于任何其他项,但在C++中有类型系统,这种情况并不完全适用。 此外,我注意到λ表达式要么转换为函数指针(当它们没有捕...
有人知道如何在Java中编写基本的(untyped)lambda演算表达式吗?例如: 恒等函数(λx.x) 自身应用(λx.x x) 函数应用(λx.λarg.x arg) Java不是无类型的,所以我猜任何解决方案都必须适应类型。但我只找到了以下难读的解决方案: static<...