延续通过式程序

问题描述

我很难理解连续过程如何传递先前函数调用中的样式“记住”值。

作为示例,我有以下过程将从列表中过滤偶数值:

(define (get-pairs alist proc)
  (if (null? alist)
      (proc '())
      (get-pairs
       (cdr alist)
       (lambda (l)
         (let ((num (car alist)))
           (if (zero? (remainder num 2))
               (proc (cons num l))
               (proc l)))))))

然后我用:

(get-pairs '(1 2)
           (lambda (n) (display n)))

要获得预期的结果(2)

get-pairs将递归调用自身,直到其参数alist为空。那么最后一个函数调用将是:(get-pairs '() proc)proc将是以下过程:

(lambda (l)
         (let ((num (car alist)))
           (if (zero? (remainder num 2))
               (proc (cons num l))
               (proc l))))

在此lambda主体中,alistproc是之前的函数调用的参数:(get-pairs '(2) proc)。我的问题是,如果proc仅在最后评估,每个lambda过程如何“记住”过去函数调用的参数?

或者是在每次调用get-pairs时,都会“分析”作为参数传递给下一个调用的lambda主体,并带有alistproc的对应值已经取代了它的身体?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)