在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)))))))))
Run Code Online (Sandbox Code Playgroud)
这是简化的:
(define rember
(lambda (a lat)
(cond
((null? lat) (quote ()))
((eq? (car lat) a) (cdr lat))
(else (cons (car lat)
(rember a (cdr lat)))))))
Run Code Online (Sandbox Code Playgroud)
据我所知,主要的不同之处在于,这个功能已经从两个问题变成了一个问题,每个问题一个问题,一个问题得到两个问题.
函数的参数是原子"a"和列表"lat".
这是第一次在密集书面的前言之外,书中引用了"结构"这个词.在我看来,到目前为止,"结构"一词的定义可以解释.
之前有人问过这个确切的问题,但我无法回答这个问题.为什么两个cond结构与列表的结构重合或不重合?在我看来,清单根本没有任何条件!
不是条件相当于Scheme中的问题吗?也许我误解了条件是什么,这可能是我沮丧的合理根源.无论如何,对此的任何澄清将非常感谢!谢谢!
scheme structure conditional-statements the-little-schemer racket