我正在尝试定义一个带有2个列表和非负整数的参数的过程。假设完美输入。我希望它构建第一个列表中的元素列表UNTIL它到达给定的元素整数,此时我想用第二个列表中的其余元素完成它。让我演示一下。
~(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) )))))
所有帮助将不胜感激!
谢谢!
答案 0 :(得分:2)
嗯,这条线不能做你想做的事:
(if (null? (or seq1 seq2))
在Scheme中,空列表是 true 值; Scheme中仅 false值为 #f 。这意味着
(or '() '(a))
返回'(),但
(or '(a) '())
返回'(a)
因此,检查null将仅返回#t的一半时间。 (如果'()是假值,就像在常规Lisp中一样,那么永远不会工作,所以我不确定是什么你在想。)
如果你希望该行返回true,如果其中一个列表为null,你将不得不重新考虑它。
然后是
行(cons seq2 '())
尝试自己测试该功能,看看会发生什么 - 它不是你需要的。如果你考虑一下,那条线应该相当简单。那时你真的需要回报什么?