当只有 cons,first,rest,empty 时,如何将元素添加到列表的末尾(在空之前)?并且可以使用 cond 递归
问问题
34581 次
2 回答
6
想想你将如何实现append
(或者,更一般地说,想想你将如何实现右折叠)。现在,如果您将一个列表附加到包含要添加的元素的单例列表中,那么您基本上已经附加了您的元素。
(显然,这是 O(n),所以不要以这种方式单独添加元素。)
这是使用右折叠的解决方案:
(define (append-element lst elem)
(foldr cons (list elem) lst))
和使用的解决方案append
:
(define (append-element lst elem)
(append lst (list elem)))
因此,如果您可以使用您列出的操作(很简单!试试)来实现其中一个foldr
或您自己,那么您就可以开始了。append
PS 实际上,您可以append
使用右折叠来实现:
(define (append lst1 lst2)
(foldr cons lst2 lst1))
但这仍然让您foldr
自己实施。;-) (提示:这很容易。看看我的左折叠实现,以获得开始的想法。)
于 2012-10-04T01:35:36.967 回答
3
这看起来像家庭作业,所以我会给你一些指导,让你走上正轨,填空:
(define (add-last lst ele)
(cond ((empty? lst) ; if the list is empty
<???>) ; create a one-element list with `ele`
(else ; if the list is non-empty
(cons <???> ; cons the first element in the list
<???>)))) ; with the result of advancing the recursion
以上可以用cons
、first
、rest
、empty?
来实现cond
,不需要其他过程。
于 2012-10-04T02:07:33.880 回答