我在将列表 append 到另一个列表时遇到问题。下面是我的代码。当我运行 (append '(1 2) '(3 4)) 时,我得到 '(1 3 2 4)。
我希望输出为 '(1 2 3 4)
(define (append l m)
(if (null? l) '()
(cons (car l) (append m (cdr l)))))
谢谢
最佳答案
那么通过这样切换两个列表(在递归调用 append 时切换 m 和 l 的位置),您将获得第一个列表的第一项,然后是第二个列表的第一项等。
如果你不想那样,你应该把 l 作为第一个参数,而 m
作为第二。所以你得到:
(define (append l m)
(if (null? l) '()
(cons (car l) (append (cdr l) m))))
当然,这也不能按预期工作,因为现在您只能返回第一个列表,而根本没有 append 任何内容。您需要做的是,一旦第一个列表完全 append (即一旦
l
为空),您需要返回第二个作为尾部,如下所示:(define (append l m)
(if (null? l) m
(cons (car l) (append (cdr l) m))))
关于方案 append 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356190/