问题描述
我很难理解连续过程如何传递先前函数调用中的样式“记住”值。
作为示例,我有以下过程将从列表中过滤偶数值:
(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主体中,alist
和proc
是之前的函数调用的参数:(get-pairs '(2) proc)
。我的问题是,如果proc
仅在最后评估,每个lambda过程如何“记住”过去函数调用的参数?
或者是在每次调用get-pairs
时,都会“分析”作为参数传递给下一个调用的lambda主体,并带有alist
和proc
的对应值已经取代了它的身体?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)