标签: lambda-calculus

调试:无法将预期类型“GHC.Types.Bool”与实际类型“Bool”匹配

我正在尝试解决 Haskell 的以下练习:

\n

定义函数exists::(N-> Bool)-> N->Bool,它接收谓词 p 和自然数 n,并且如果 O 和 n 之间存在任意数字且 p 为 true,则返回 True。\n示例:

\n
exists pair three = True\nexists isGreaterThanZero O = False\n
Run Code Online (Sandbox Code Playgroud)\n

这段代码位于我的存在函数之前:

\n
{-#LANGUAGE GADTs #-}\n{-# OPTIONS_GHC -fno-warn-tabs #-}\n{-# OPTIONS_GHC -fno-warn-missing-methods #-}\n\nmodule Naturales where\n\nimport Prelude(Show)\n\ndata Bool where {   False :: Bool; \n                    True :: Bool\n                } deriving Show\n\n{- Data Type of Natural Numbers -}\ndata N where { O :: N ; \n               S :: N -> N \n            } deriving …
Run Code Online (Sandbox Code Playgroud)

debugging lambda haskell case lambda-calculus

2
推荐指数
1
解决办法
112
查看次数

将Python转换为Haskell/Lambda演算

Haskell和Lambda演算中的Python代码是什么?

def f1():
   x = 77
   def f2():
      print x
   f2
f1
Run Code Online (Sandbox Code Playgroud)

我在lambda演算中的尝试

\x. 77 (\x.x)
Run Code Online (Sandbox Code Playgroud)

python lambda haskell lambda-calculus

1
推荐指数
1
解决办法
1533
查看次数

闭包对循环变量的正确语义是什么?

考虑以下lua代码:

f = {}

for i = 1, 10 do
    f[i] = function()
        print(i .. " ")
    end
end

for k = 1, 10 do
    f[k]()
end
Run Code Online (Sandbox Code Playgroud)

这将打印从1到10的数字.在这种情况下,i将关闭外部循环的每次迭代的值.这就是我一直都懂得闭合的方式,我很开心......

...直到我将一些lua代码移植到c#中,我试图做同样的事情:

var f = new Action[10];

for (int i = 0; i < 10; i++)
{
    f[i] = (new Action(delegate()
    {
        Console.Write(i + " ");
    }));
}
for (int k = 0; k < 10; k++)
{
    f[k]();
}
Run Code Online (Sandbox Code Playgroud)

现在我将10号打印10次(让我们忘记了lua数组是基于1的).实际上,在这种情况下,闭包对变量起作用,而不是它的值,这很有意义,因为我只是在第一个循环结束后调用函数.

JavaScript似乎具有相同的语义(接近变量):

var f = []

for (var i = 0; …
Run Code Online (Sandbox Code Playgroud)

javascript c# lua closures lambda-calculus

1
推荐指数
1
解决办法
790
查看次数

我的Lambda微积分语法是否明确无误?

我正在尝试为处理lambda演算的语言编写一个小编译器.以下是我发现的语言含糊不清的定义:

E ? ^ v . E  | E E | ( E ) | v
Run Code Online (Sandbox Code Playgroud)

符号^,.,(,)和v是标记.^表示lambda,v表示变量.形式^ vE的表达式是函数定义,其中v是函数的形式参数,E是其主体.如果f和g是lambda表达式,则lambda表达式fg表示函数f应用于参数g.

在假设函数应用程序是左关联的情况下,我试图为这种语言编写一个明确的语法,例如fgh =(fg)h,并且该函数应用程序比...更严格地绑定,例如(^ x.^ y. xy)^ zz =(^ x.(^ y.xy))^ zz

这是我到目前为止所做的,但我不确定它是否正确:

E -> ^v.E | T
T -> vF | (E) E
F -> v | epsilon
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

lambda grammar parsing programming-languages lambda-calculus

1
推荐指数
1
解决办法
2570
查看次数

使用整数偏移来引用隐式单个参数的lambda表示法的名称是什么?

看起来像这样(示例显示教堂数字和Y组合器):

zero := ?.?.0
one  := ?.0             -- or more verbosely: ?.?.1 0
two  := ?.?.1 (1 0)
three:= ?.?.1 (1 (1 0))

add := ?.?.?.?.3 1 (2 1 0)

Y := ?.(?.1 (0 0)) (?.1 (0 0))
Run Code Online (Sandbox Code Playgroud)

这种符号的名称是什么?我似乎已经忘记了.

theory lambda functional-programming function lambda-calculus

1
推荐指数
1
解决办法
41
查看次数

Lambda演算β减少具体步骤和原因

从我最近阅读的一本书:

第一:

.(..)()((.)) 在这一点上,最外层的lambda绑定是不可简化的,因为它没有适用的参数.剩下的就是一次一层地进入术语,直到我们找到可以减少的东西.

下一个:

.(.)((.)) 我们可以将lambda绑定应用于参数.我们一直在寻找可以申请的条款.我们可以应用的下一件事是lambda绑定到lambda术语((.)).

我不明白.在第一部分,它说 has no argument to apply to, that I can probably understand, but then at the Next section I think the z可以被束缚,((.))因为正如你所看到的,.(.)身体 clearly has a z论点可以是界.但是,这本书恰恰忽略了头 and directly bound n((.)).我的意思.是没有n争论,为什么它会受到约束?

有人可以向我解释一下吗?

lambda haskell functional-programming lambda-calculus

1
推荐指数
2
解决办法
483
查看次数

溶解lambda演算

我有以下lambda演算:

(?x. + (- x 1)) 9 3
Run Code Online (Sandbox Code Playgroud)

正确的beta减少是:

+ (- 9 1) 3
Run Code Online (Sandbox Code Playgroud)

我犯了一个错误,取而代之的是9号码:

+ (- 3 1) 9
Run Code Online (Sandbox Code Playgroud)

而且我得到了相同的结果.

在与解决方案进行比较之前,我没有意识到这是错误的.

我是否必须采取最接近的替代,在这种情况下是9?

haskell lambda-calculus

1
推荐指数
1
解决办法
157
查看次数

lambda演算中变量之间的Alpha等价

只是一个相当简单的问题(所以在我看来).如果两个变量(x)(x)是alpha等价的.是(x1x2)(x2x1)阿尔法相同呢?

haskell lambda-calculus

1
推荐指数
1
解决办法
730
查看次数

Haskell中有这个lambda语句的有效定义吗?

我对Haskell中的函数有以下定义.

> q7 :: forall a. forall b. ((a -> b) -> a) -> a
Run Code Online (Sandbox Code Playgroud)

我要么为它创建一个定义,要么说明为什么定义不存在.这是我的想法:

q7接受任何类型的ab.该声明(a -> b) -> a将通过采取两个项目并返回后者来实施.现在,如果我再进一步,我可以返回同样的" a"来实现((a -> b) -> a) -> a.我看到在一个问题ab可以是任何类型,因此对于每个实例a,可能a是不同的类型?例如,它可能是这样的((Int -> Bool) -> [Char]) -> Int吗?我可能谋杀了那种语法.如果有人有任何提示,或者有人可以确认或否认我的想法,我将非常感激!

haskell typing lambda-calculus

1
推荐指数
1
解决办法
143
查看次数

ETA的缩写是什么?

我只是从eta扩展中找到了一些间接线索

SimpleExpr :: = SimpleExpr1`_
'如果表达式_是方法类型或如果是按名字调用参数,则表达式_的格式正确。
如果是带有参数的方法,则_表示通过eta扩展转换为函数类型。
如果是类型=>的无参数方法或按名称调用参数,则_表示类型()=>的函数,该函数评估何时将其应用于空的参数列表()。

所以我猜eta是匿名函数表达的缩写吗?我对吗?

scala terminology lambda-calculus

1
推荐指数
1
解决办法
52
查看次数