方案,如何附加单个项目的列表?

时间:2014-04-08 20:21:25

标签: scheme racket

我试图创建一个函数来附加一个包含单个项目的列表。它正在做的是返回一个点对。

(define (append lst x)
  (cond
    ((null? lst) x)
    (else (cons (car lst) (append (cdr lst) x)))))

我得到的输出是

> (append '(1 2 3 4 5 6 7) 8)
(1 2 3 4 5 6 7 . 8)

我想要

(1 2 3 4 5 6 7 8)

感谢。

2 个答案:

答案 0 :(得分:2)

试试这个:

(define (append lst x)
  (cond
    ((null? lst) (cons x '())) ; here's the change
    (else (cons (car lst) (append (cdr lst) x)))))

请注意,所有正确的列表必须以空列表结尾,否则它将发生您刚刚经历过的事情。换句话说:

(cons 1 (cons 2 3))
=> '(1 2 . 3) ; an improper list

(cons 1 (cons 2 (cons 3 '())))
=> '(1 2 3)   ; a proper list

答案 1 :(得分:1)

如果您被允许使用append,则没有理由不这样做。它的执行与您尝试的几乎完全相同,因为append是O(n),其中n是第一个列表中的元素数。这只是更少的代码。

;; append element to last
(define (append-elt lst x)
  (append lst (list x)))