在The Little Schemer的第 3 章中,我们为什么不立即简化 rember 函数的问题的答案是“因为函数的结构与其参数的结构不一致”。我无法理解函数的结构是什么,参数的结构是什么,以及它们之间的区别是什么。
这是未简化的版本:
(define rember
(lambda (a lat)
(cond
((null? lat) (quote ()))
(else (cond
(( eq? (car lat) a) (cdr lat))
(else (cons (car lat)
(rember a
( cdr lat)))))))))
这是简化的:
(define rember
(lambda (a lat)
(cond
((null? lat) (quote ()))
((eq? (car lat) a) (cdr lat))
(else (cons (car lat)
(rember a (cdr lat)))))))
据我所知,主要区别在于该功能已从两个 conds 各问一个问题变为一个 conds 问两个问题。
该函数的参数是原子“a”和列表“lat”。
这是第一次,除了密密麻麻的前言之外,本书引用了“结构”这个词。在我看来,到目前为止,“结构”一词的定义是可以解释的。
以前有人在这里问过这个确切的问题,但我无法回答这个问题。为什么两个条件结构与列表的结构一致或不一致?一份清单,在我看来,根本就没有任何条件!
条件不等于Scheme中的问题吗?也许我误解了条件是什么,这可能是我沮丧的合理根源。无论如何,对此的任何澄清将不胜感激!谢谢!