计划追加程序

Chr*_*ght 5 scheme 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)))))
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)