Scheme 如何在LISP中附加两个列表的第一个元素
我对LISP很生疏,我正试图把2个列表合并起来Scheme 如何在LISP中附加两个列表的第一个元素,scheme,lisp,Scheme,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)) 这导致 (12345678) 我想要两个列表的第一个元素,如果为空,它将填充另一个列表的其余部分 (1 4 2 5 3 6 7 8)你很接近了。您需要在每个递归
(define (append lst1 lst2)
(if (null? lst1) lst2
(cons (car lst1) (append (cdr lst2) lst2))))
(append '(1 2 3) '(4 5 6 7 8))
这导致
(12345678)
我想要两个列表的第一个元素,如果为空,它将填充另一个列表的其余部分
(1 4 2 5 3 6 7 8)你很接近了。您需要在每个递归调用上切换列表输入的顺序,以便可以选择结果列表采用哪个元素。您还应该将
append
重命名为其他名称,因为您并没有真正执行append过程,而且该名称有点误导:
(define (merge lst1 lst2)
(if (null? lst1)
lst2
(cons (car lst1) (merge lst2 (cdr lst1)))))
>(合并(1234)(45678))
(1 4 2 5 3 6 7 8)
你很接近了。您需要在每个递归调用上切换列表输入的顺序,以便可以选择结果列表采用哪个元素。您还应该将append
重命名为其他名称,因为您并没有真正执行append过程,而且该名称有点误导:
(define (merge lst1 lst2)
(if (null? lst1)
lst2
(cons (car lst1) (merge lst2 (cdr lst1)))))
>(合并(1234)(45678))
(1 4 2 5 3 6 7 8)
这不是常见的Lisp;这看起来像是个骗局。此外,这肯定不是给出您建议的结果的实际代码:list1
和list2
不是此处定义的append
的参数。当拼写错误被纠正时,这段代码应该可以工作。@adabsurdum已纠正,但它仍然返回(12345678),这是不正确的,因为我希望(124253678)我错过了排序位;你还有两个打字错误:list2
->lst2
,和(123456)
->(12345678)
@adabsurdum啊,是的,谢谢!这不是常见的口齿不清;这看起来像是个骗局。此外,这肯定不是给出您建议的结果的实际代码:list1
和list2
不是此处定义的append
的参数。当拼写错误被纠正时,这段代码应该可以工作。@adabsurdum已纠正,但它仍然返回(12345678),这是不正确的,因为我希望(124253678)我错过了排序位;你还有两个打字错误:list2
->lst2
,和(123456)
->(12345678)
@adabsurdum啊,是的,谢谢!您需要检查两个列表是否都为空,然后返回另一个,否则您会遇到麻烦。@tfb--我测试了错误的列表;您只需要测试lst1
,因为它是由car
操作的。谢谢你的ping;)哦,是的,没错。您将得到一个额外的调用(这显然无关紧要),但代码更易于阅读。您需要检查两个列表是否为空,然后返回另一个列表,否则您会遇到麻烦。@tfb--我测试了错误的列表;您只需要测试lst1
,因为它是由car
操作的。谢谢你的ping;)哦,是的,没错。您将得到一个额外的调用(显然这并不重要),但代码更易于阅读。