Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming 对于定点组合子Y,什么是\x.f(xx)_Functional Programming_Computer Science_Theory_Lambda Calculus_Combinators - Fatal编程技术网

Functional programming 对于定点组合子Y,什么是\x.f(xx)

Functional programming 对于定点组合子Y,什么是\x.f(xx),functional-programming,computer-science,theory,lambda-calculus,combinators,Functional Programming,Computer Science,Theory,Lambda Calculus,Combinators,对于Y组合定理 For every function F there exists an X such that FX=X 这里的F是什么意思?F(x)=x+1的固定点是什么?我的理解是,x+1=x没有解决方案 以下证明: For any function F, let W be the function λx.F(xx) and let X = WW. We claim that X is a fixed point of F. Demonstrated as follows

对于Y组合定理

 For every function F there exists an X such that FX=X
这里的
F
是什么意思?F(x)=x+1的固定点是什么?我的理解是,
x+1=x
没有解决方案

以下证明:

For any function F, let W be the function λx.F(xx) and let X = WW.
    We claim that X is a fixed point of F. Demonstrated as follows

    X = WW
    X = λx.F(xx) W
    X = F(WW)
    X = FX 

λx.F(xx)
是如何定义的?再次以
F(x)=x+1
为例,什么是
F(xx)
的意思

你是对的,当
x
是一个数字时,方程
x+1=x
没有解。这里发生的事情是,
x
不局限于一个数字;它可以是函数的函数

关于
xx
:通常在lambda演算中
fx
是一个函数应用程序,因此
xx
是“x应用于x”,或
x(x)
。请注意,x是如何应用的函数和传递给它的值

因此,如果
F(x)=x+1
,你有
F(xx)=x(x)+1
W=λx.(x(x)+1)
,并且
x=W(W)
将是函数:

X = W(W) = (λx.(x(x)+1)) (λy.(y(y)+1))
这可能看起来非常抽象,因为如果你尝试在任何具体的值上展开X,你会发现这个过程永远不会结束。但不要让这件事困扰你;尽管如此,
X
F
的一个固定点,因为

F(X) = F(W(W))             by definition of X = W(W)
     = (λx.F(x(x))) W      using the fact that (λt.f(t))x is f(x)
     = W(W)                by definition of W = λx.F(x(x))
     = X                   by definition of X = W(W).

函数的不动点是什么以及lambda演算符号似乎有点混淆

首先,
λx.F(xx)
是一个函数,它取一个参数x,“应用”x到x,然后“应用”F到结果,所以更像是
函数(x){返回F(x(x));}
,但不要从字面上理解它,因为在lambda演算中,它是关于参数的替换,并且没有进行替换的顺序(我用来简化的是应用顺序)

因此,用简单的文本重写语义重写为类似C的语法(实际上是JavaScript,因为它有第一类函数)的证明如下所示:

var W = function (x) { return F(x(x)); }
var X = W(W);

W(W) => (function (x) { return F(x(x)); }(W))
     => return F(W(W))
     => return F(X)
     => F(X)
现在回到定点。你给出一个不存在定点的代数例子……对于函数来说,它更像是“找到一个
ADD1(x)=x+1
”的定点


我希望熟悉的语法能让它更容易理解,而不是更容易:)

这里的
X
可以进一步简化为
F(X)=X+1
?你不能真正简化
X
,你只能把它扩展得越来越多。例如,仅使用
(λt.f(t))x
f(x)
这一基本事实,就可以将
x=(λx.(x(x)+1))(λy.(y(y)+1)扩展到
(λy)(y(y)+1)((λy.(y(y)+1))+1
,并且可以进一步扩展得到
x=(λx.(x(x)+1))((λx(x)+1))+n
对于任何正整数
n
。这当然只是重申一个事实,即X是F(X)=X+1的不动点意味着X=X+1=…=X+n。不动点
X=function(X){while(true)++X;return(X);}
?一个无限循环?只有在急切地求值时才是无限循环。。。但是lambda演算并没有告诉你们,你们需要做所有的替换,也没有告诉你们,替换的顺序。它只是给你一些身份。此外,固定点定义X=FX=FFX=FFFX。。。在同样的意义上是无限的……我发现@jJ关于评估策略的评论非常重要。在学习通过惰性函数语言(同名)配置的时首次遇到此问题,在该语言中,函数的固定点用于覆盖包定义;显示如何与不会导致无限循环的惰性语言一起使用。(刚刚了解到,这里定义的
fix
对闭包进行操作。)
var F = function (x) { return x + 1; }
var W = function (x) { return F(x(x)); }
      = function (x) { return function (x) { return x + 1; }(x(x)); }
var X = W(W);

W(W) => function (x) { return function (x) { return x + 1; }(x(x)); }(W)
     => return function (x) { return x + 1; }(W(W))
     => return W(W) + 1
     => W(W) + 1
     => X + 1
     => F(X)