小编mac*_*yte的帖子

Common Lisp中的持续传递风格?

为了找到一个不让我头疼的CPS的简单例子,我遇到了这个Scheme代码(Hand typed,所以parens可能不匹配):

(define fact-cps
    (lambda(n k)
        (cond
            ((zero? n) (k 1))
            (else
                (fact-cps (- n 1)
                          (lambda(v)
                             (k (* v n))))))))
(define fact
    (lambda(n)
        (fact-cps n (lambda(v)v))))  ;; (for giggles try (lambda(v)(* v 2)))

(fact 5) => 120
Run Code Online (Sandbox Code Playgroud)

很棒,但Scheme 并不是 Common Lisp,所以我对它进行了一次尝试:

(defun not-factorial-cps(n k v)
    (declare (notinline not-factorial-cps)) ;; needed in clisp to show the trace
    (cond
        ((zerop n) (k v))
        ((not-factorial-cps (1- n) ((lambda()(setq v (k (* v n))))) v))))
       ;; so not that simple...
(defun …
Run Code Online (Sandbox Code Playgroud)

lisp scheme common-lisp conceptual

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

标签 统计

common-lisp ×1

conceptual ×1

lisp ×1

scheme ×1