方案 append 程序

标签 scheme append

我在将列表 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/

相关文章:

scheme - 使用 argmax 查找元素列表中的最大数

c - 一个有效地在字符串中 append 字符的函数

Golang OpenFile O_APPEND 不尊重 Seek

javascript - 如何在 JQuery 中单击单选按钮后追加一个部分?

list - 如何获取列表方案和序言的第一个、中间和最后一个元素?

Wescheme 中的方案代码条件错误

流和替代模型

if-statement - 否则 build

javascript - 在 IE11 中添加大量元素非常慢

r - 在 df 行中追加值