我无法将列表附加到另一个列表中.以下是我的代码.当我跑(追加'(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)))))
Run Code Online (Sandbox Code Playgroud)
谢谢
sep*_*p2k 12
好吧,通过像这样切换两个列表(在递归调用append时切换m和l的位置),你将获得第一个列表的第一项,然后是第二个列表的第一项等.
如果你不想那样,你应该把l作为第一个参数,m第二个参数.所以你得到:
(define (append l m)
(if (null? l) '()
(cons (car l) (append (cdr l) m))))
Run Code Online (Sandbox Code Playgroud)
当然,这也不会像想要的那样工作,因为现在你只得到第一个列表而且根本没有附加任何内容.你需要做的是,一旦第一个列表完全附加(即一次l为空),你需要返回第二个作为尾部,如下所示:
(define (append l m)
(if (null? l) m
(cons (car l) (append (cdr l) m))))
Run Code Online (Sandbox Code Playgroud)