cps - 代码
作者:互联网
代码:
(letrec ((f (lambda (x) (cons 'a x)))
(g (lambda (x) (cons 'b (f x))))
(h (lambda (x) (g (cons 'c x)))))
(cons 'd (h '())))
;传递为向后传递,而不是向前传递
;向后传递(f x k)
;向前传递(k (f x))
;把k一层一层传递下去,k为 top level的
(letrec ((f (lambda (x k) (k (cons 'a x))))
(g (lambda (x k) (f x (lambda (v) (k (cons 'b v))))));将(f x)的结果v,与'b cons起来,即(cons 'b v),传递给调用者k
(h (lambda (x k) (g (cons 'c x) k)))) ;将g的调用结果传递给k,也就是(lambda (v) (k v)),可以简写为k
(h '() (lambda (v) (cons 'd v)))) ;将h的调用结果v,与'd cons起来传递给调用者k,此处已经是top leve了,所以直接cons起来就可以了
标签:cons,调用者,代码,letrec,传递,cps,top,lambda 来源: https://blog.csdn.net/yilu_beiyu/article/details/122557716