负责将a
添加到(b c)
的末尾以制作(b c a)
到目前为止,当我尝试
(print (cons 'a '(b c)))
我得到(a b c)
但是当我这样做
(print (cons '(b c) 'a))
我得到((b c) . a)
Stack上的所有其他类似问题似乎都比这个问题复杂,所以我想知道是否有一个简单的解决方法。
答案 0 :(得分:1)
列表是成对的链。元素是每对中的汽车,cdr是对链中下一对的引用,或链中最后对的空列表。
使用(cons 'a '(b c))
时,会在现有列表(b c)
的前面创建一对新配对,因此结果仍然是列表。
但是当您使用(cons '(b c) 'a)
时,您正在创建一个cdr为符号a
而不是列表的对。并且列表(b c)
中的最后一对仍将其cdr指向空列表。
您需要复制第一个列表,到末尾时,必须使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)
方法)。 / li>