你怎么能在一个列表的末尾(空白之前)添加一个元素,只有cons,first,rest,empty?和cond递归可以使用
考虑一下如何实现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自己实现.;-)(提示:这很容易.看看我的左撇子实现开始的想法.)