任务是在 (b c)
的末尾添加 a
,以得到 (b c a)
目前为止,我尝试的方法是
(print (cons 'a '(b c)))
我得到了(a b c)
但是当我执行以下操作时
(print (cons '(b c) 'a))
我得到了((b c) . a)
在Stack上所有其他类似的问题似乎比这个问题更复杂,所以我想知道是否有一个简单的解决方法。
(cons 'a '(b c))
时,你在现有列表(b c)
前面创建了一个新的成对元素,所以结果仍然是一个列表。(cons '(b c) 'a)
时,你创建了一个cdr指向符号a
而不是一个列表的成对元素。并且列表(b c)
中的最后一个成对元素仍然将其cdr指向空列表。a
的列表。你可以通过递归过程来实现这一点。"最初的回答"(define (list-append old-list new-el)
(if (null? old-list)
(list new-el)
(cons (car old-list)
(list-append (cdr old-list) new-el))))
(list-append '(b c) 'a)
逻辑如下:
(cons new-element old-list)
方法)。最初的回答:
snoc
(cons
的反转)。 - coredump
(append '(b c) (list 'a))
。 - Will Ness