Scheme将元素添加到列表末尾

use*_*737 6 scheme racket

你怎么能在一个列表的末尾(空白之前)添加一个元素,只有cons,first,rest,empty?和cond递归可以使用

Chr*_*ung 6

考虑一下如何实现append(或者更一般地,考虑如何实现右侧折叠).现在,如果将列表附加到包含要添加的元素的单例列表中,则基本上附加了元素.

(显然,这是O(n),所以不要以这种方式单独添加元素.)


这是使用右折叠的解决方案:

(define (append-element lst elem)
  (foldr cons (list elem) lst))
Run Code Online (Sandbox Code Playgroud)

和解决方案使用append:

(define (append-element lst elem)
  (append lst (list elem)))
Run Code Online (Sandbox Code Playgroud)

因此,如果您可以使用您列出的操作(这很容易!尝试它)实现其中任何一个foldr或您append自己,那么您很高兴.

PS实际上,您可以append使用右折叠实现:

(define (append lst1 lst2)
  (foldr cons lst2 lst1))
Run Code Online (Sandbox Code Playgroud)

但这仍然让你foldr自己实现.;-)(提示:这很容易.看看我的左撇子实现开始的想法.)