List 方案:在某一点合并列表

List 方案:在某一点合并列表,list,scheme,List,Scheme,我试图定义一个过程,该过程接受2个列表和一个非负整数的参数。假设输入完美。我希望它在第一个列表中构造一个元素列表,直到它达到给定的元素整数,在这一点上,我希望用第二个列表中的剩余元素来完成它。让我示范一下 ~(combine '(a b c d e) '(w x y z) 2) (a b y z) 请注意,第二个列表从下一个索引开始继续,就好像它一直被制作到cdr一样 这就是我所拥有的。当然,这不起作用,我想我可能使用了错误的逻辑 (define (combine seq1 seq2 poin

我试图定义一个过程,该过程接受2个列表和一个非负整数的参数。假设输入完美。我希望它在第一个列表中构造一个元素列表,直到它达到给定的元素整数,在这一点上,我希望用第二个列表中的剩余元素来完成它。让我示范一下

~(combine '(a b c d e) '(w x y z) 2)
(a b y z)
请注意,第二个列表从下一个索引开始继续,就好像它一直被制作到cdr一样

这就是我所拥有的。当然,这不起作用,我想我可能使用了错误的逻辑

(define (combine seq1 seq2 point)
 (if (null? (or seq1 seq2))
   '()
   (if (equal? point 0)
       (cons seq2 '())
       (cons (car seq1) (combine (cdr seq1) (cdr seq2) (- point 1) )))))
所有的帮助将不胜感激


谢谢大家!

嗯,这句话不符合你的要求:

(if (null? (or seq1 seq2))
在Scheme中,空列表是一个true值;Scheme中唯一的假值是#f。也就是说

(or '() '(a))
返回”()但是

(or '(a) '())
返回”(a)

因此,您的null检查只会返回一半的时间。(如果'()是一个错误的值,就像在常规Lisp中一样,那么它永远不会工作,所以我不确定您在想什么)

如果您希望在任何一个列表为空时该行返回true,则必须重新考虑它

然后是排队

(cons seq2 '())

试着自己测试这个函数,看看会发生什么——这不是你需要的。如果你仔细想想,那条线应该更简单。在这一点上,你到底需要返回什么?

好吧,我得到了大部分我想要的东西!现在我得到了一个类似于((ab)y z)的列表,如何将这两个列表组合起来?我只想用append,但我的老师不允许。看起来你就快到了,但你可能把别的事情搞砸了。我很惊讶,因为最后一行完全正确。如果你把最后一行保持原样,我不知道你是如何得到新结果的,除非你在其他地方弄乱了seq1。事实上,我把seq1放错了地方。我已经修复了它,现在代码工作得很好。非常感谢!