8

当只有 cons,first,rest,empty 时,如何将元素添加到列表的末尾(在空之前)?并且可以使用 cond 递归

4

2 回答 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

以上可以用consfirstrestempty?来实现cond,不需要其他过程。

于 2012-10-04T02:07:33.880 回答