我遇到了这段代码在维基百科上 http://en.wikipedia.org/wiki/Continuation-passing_style:
(define (pyth x y k)
(* x x (lambda (x2)
(* y y (lambda (y2)
(+ x2 y2 (lambda (x2py2)
(sqrt x2py2 k))))))))
文章说该代码是另一段代码的 Continuation-Passing 版本:
(define (pyth x y)
(sqrt (+ (* x x) (* y y))))
然而,我很困惑:这到底是如何运作的?这里如何将数字乘以 lambda?(* x x (lambda ...))
在维基百科的例子中,*
与以下意思不同*
在传统的例子中。
我会将维基百科的示例重写为:
(define (pyth x y k)
(cps-* x x (lambda (x2)
(cps-* y y (lambda (y2)
(cps-+ x2 y2 (lambda (x2py2)
(cps-sqrt x2py2 k))))))))
在这种形式中,每个cps-xxx
函数执行指定的操作,然后将结果传递给最后一个参数。你可以这样称呼它:
(pyth 2 3 display)
将 2 和 3 相乘,得到 6,然后将 6 传递给display
。 (实际上你想将结果传递给cps-display
显示其初始参数,然后调用another函数指定为其最后一个参数)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)