【发布时间】:2012-05-21 20:51:21
【问题描述】:
我很难理解第 145 页上 The Little Schemer 的 evens-only*&co 示例发生了什么。
代码如下:
(define evens-only*&co
(lambda (l col)
(cond
((null? l)
(col '() 1 0))
((atom? (car l))
(cond
((even? (car l))
(evens-only*&co (cdr l)
(lambda (newl product sum)
(col (cons (car l) newl)
(opx (car l) product)
sum))))
(else
(evens-only*&co (cdr l)
(lambda (newl product sum)
(col newl product (op+ (car l) sum)))))))
(else
(evens-only*&co (car l)
(lambda (newl product sum)
(evens-only*&co (cdr l)
(lambda (dnewl dproduct dsum)
(col (cons newl dnewl)
(opx product dproduct)
(op+ sum dsum))))))))))
初始col可以是:
(define evens-results
(lambda (newl product sum)
(cons sum (cons product newl))))
我没有得到的是,l 作为'((1) 2 3),它立即进入最终的else,(car l) 作为(1) 和(cdr l) 作为(2 3)。很好,但是我想从newl、product、sum 中找出dnewl、dproduct、dsum,我的大脑一片空白。如果有人能指导我如何设置 DrRacket 或 Chez Scheme 或 MIT-Scheme 来运行步进器,那也会很有帮助。
但也许我说得太早了。第一次阅读这篇文章的初学者真的应该理解这种疯狂的延续吗?
【问题讨论】:
-
关于设置步进器,请参阅stackoverflow.com/questions/10499514/…
标签: recursion lambda scheme continuation-passing the-little-schemer