【发布时间】:2012-09-23 17:21:26
【问题描述】:
我目前正在阅读《小阴谋家》的第 4 版。一个早期的练习是创建一个函数insertR,它将一个值插入到列表中给定值的右侧。本书最终得出以下定义:
(define insertR
(lambda (new old lat)
(cond
((null? lat) (quote ()))
(else (cond
((eq? (car lat) old)
(cons old
(cons new (cdr lat))))
(else (cons (car lat)
(insertR new old
(cdr lat)))))))))
我自己的定义是这样的:
(define insertR
(lambda (new old lat)
(cond
((null? lat) (quote ()))
((eq? (car lat) old) (cons old (cons new (cdr lat))))
(else (cons (car lat) (insertR new old (cdr lat)))))))
它们是等价的吗?
【问题讨论】:
-
我相信没有人会在其中一个搜索引擎中搜索你的标题(以下功能是否等效)......你不能改进它吗?
-
是的,我认为你是对的。我把它改成了希望更好的东西,不过你可以随意改变它。
-
不知何故,来自 gdoron 的提示给了他的成果:我现在正在阅读 The Little Schemer 并寻找注意到同样事情的人:) 但是,正如其他人所说,在第 41 页作者似乎鼓励这种简化。
标签: lisp scheme conditional-statements the-little-schemer