标签: lambda-calculus

是否可以在交互组合器上有效地实现 Lamping 的抽象算法?

在交互网上有一个已知的 \xce\xbb 微积分项的实现的已知实现。但它过于复杂且效率低下。众所周知,Lamping 的抽象算法能够以最佳方式将 xcexbb 微积分项的一个非常大的子集评估为正规形式。此外,它与交互组合器非常相似,只有一个关键区别:不是两种类型的节点,而是无限系列的不同可能节点。换句话说,Lamping的抽象算法只是交互组合器加上整数标签。

\n\n

是否可以在交互组合器上有效地模拟这些整数标签(以及抽象算法)?

\n

algorithm functional-programming lambda-calculus

5
推荐指数
0
解决办法
511
查看次数

为什么不能像定义中那样实现定点组合器?

我正在尝试像 Curry 定义的那样实现 Y 组合器。

此代码不起作用。它会导致无限递归。

F = (lambda f: (lambda x: (1 if x == 0 else (x * (f(x-1))))))    
Y = (
    lambda f: 
    (lambda x: f(x(x)))
    (lambda x: f(x(x)))
)
Y(F)(3)
Run Code Online (Sandbox Code Playgroud)

但是,这个确实有效:

Y = (
    lambda f: 
    (lambda x: f(
        lambda v: x(x)(v)
    ))
    (lambda x: f(
        lambda v: x(x)(v)
    ))
)
Y(F)(3)
Run Code Online (Sandbox Code Playgroud)

为什么第一个不起作用,而第二个起作用?

python lambda-calculus python-3.x

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

用于函数式编程的lambda演算

在lambda演算中(λx.λy.λs.λz.xs(ysz))用于添加两个教会数字我们如何解释这一点,是否有任何好的资源用于函数式编程的lambda演算?非常感谢您的帮助

lambda functional-programming lambda-calculus

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

为什么lambda演算不是很多(根本)?

为什么纯粹的无类型lambda演算经常被描述为不可能使用?

有一个合适的函数库,它与其他任何函数式语言都不一样吗?

lambda-calculus

4
推荐指数
2
解决办法
737
查看次数

比较语法树模数alpha转换

我正在编写一个编译器/校对检查器,我想知道,如果我有一个这样的语法树,例如:

data Expr
    = Lambdas (Set String) Expr
    | Var String
    | ...
Run Code Online (Sandbox Code Playgroud)

如果有办法检查Exprs 的alpha等价(等价模重命名).Expr然而,这与lambda演算的不同之处在于lambda中的变量集是可交换的 - 即参数的顺序不会影响检查.

(但是,为了简单起见,与此Lambda ["x","y"] ...不同Lambda ["x"] (Lambda ["y"] ...),在这种情况下,顺序确实很重要).

换句话说,给定两个Exprs,如何才能有效地找到从一个到另一个的重命名?NP-complete这种组合问题的气味.

syntax haskell lambda-calculus np-complete abstract-syntax-tree

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

哪种FP语言跟随lambda演算最接近?

哪个FP语言遵循lambda演算最接近其代码的外观,感觉,就像lambda演算抽象一样?

functional-programming lambda-calculus

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

Haskell表达式的Alpha转换

给定一个Haskell表达式,我想执行alpha转换,即.重命名一些非自由变量.

我已经开始实现我自己的函数了,它可以在haskell-src-exts Exp树上运行,但事实证明它非常重要,所以我不禁想知道 - 是否有一个易于使用的已建立的库这种源转换的解决方案?理想情况下,它应该与haskell-src-exts集成.

haskell lambda-calculus haskell-src-exts

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

这可以用点自由风格表达吗?

给出以下表达式来总结一个IEnumerable数字:

let sum l = l |> Seq.reduce(+)  //version a
Run Code Online (Sandbox Code Playgroud)

有可能消除这个论点 - 就像这样吗?

let sum = Seq.reduce(+)    //version b
Run Code Online (Sandbox Code Playgroud)

我从F#编译器(FS0030)得到一个错误,我似乎记得曾经看过有关"eta转换"的内容,但遗憾的是我对lambda calc的了解太少,无法跟踪如何涉及eta转换.

参数可以像版本b一样被删除吗?

有人请指点文献来解释eta转换以及它将如何在这段特殊代码中发挥作用吗?

FS0030:

stdin(1,5):错误FS0030:值限制.值'sum'被推断为具有泛型类型val sum:('_a - > int)当'_a:> seq要么使'sum'的参数显式,要么如果你不打算使它是通用的,添加类型注释.

f# lambda-calculus pointfree

4
推荐指数
3
解决办法
631
查看次数

是否可以使用迭代递增在类型化的教会数字上实现添加?

我无法找到一种方法来将加法定义为重复递增,尽管这在无类型语言中是可能的.这是我的代码:

{-# LANGUAGE RankNTypes #-}
type Church = forall a . (a -> a) -> (a -> a)

zero :: Church
zero = \f -> id

inc :: Church -> Church
inc n = \f -> f . n f

-- This version of addition works
add1 :: Church -> Church -> Church
add1 n m = \f -> n f . m f

-- This version gives me a compilation error
add2 :: Church -> Church -> Church
add2 …
Run Code Online (Sandbox Code Playgroud)

haskell types lambda-calculus church-encoding higher-rank-types

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

在Haskell中,两个函数看似相等但有所不同

我正在尝试在Haskell中实现不带Prelude的布尔值。

对表达式beq true true "TRUE" "FALSE"进行评估后,就可以了。但是,当我尝试评估时beq' true true "TRUE" "FALSE",由于预期类型和实际类型之间的某些差异而导致失败。

这是代码。

import qualified Prelude as P

i = \x -> x
k = \x y -> x
ki = k i

true = k
false = ki

not = \p -> p false true
beq = \p q -> p (q true false) (q false true)
beq' = \p q -> p q (not q)
Run Code Online (Sandbox Code Playgroud)

因此,我检查了推论的推断类型。

*Main> :type beq
beq
  :: (t1 -> t1 -> t2) …
Run Code Online (Sandbox Code Playgroud)

haskell type-inference lambda-calculus

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