我试图创建一个函数来附加一个包含单个项目的列表。它正在做的是返回一个点对。
(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)
感谢。
答案 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)))