如何在 LISP 中追加两个列表的第一个元素

How to append first element of two lists in LISP

我对 LISP 非常陌生,我正在尝试获取 2 个列表并将它们合并。

(define (append lst1 lst2)
        (if (null? lst1) lst2
            (cons (car lst1) (append (cdr lst2) lst2))))
(append '(1 2 3) '(4 5 6 7 8))

这导致

(1 2 3 4 5 6 7 8)

我想要两个列表的第一个元素,如果为空,它将填充另一个列表的其余部分。

(1 4 2 5 3 6 7 8)

你很接近。您需要在每次递归调用时切换列表输入的顺序,以便您可以交替将哪个元素用于结果列表。您还应该将 append 重命名为其他名称,因为您实际上并没有在执行追加过程,而且该名称有点误导:

(define (merge lst1 lst2)
  (if (null? lst1)
      lst2
      (cons (car lst1) (merge lst2 (cdr lst1)))))
> (merge '(1 2 3) '(4 5 6 7 8))
(1 4 2 5 3 6 7 8)