1

我正在尝试定义一个过程,该过程采用 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) )))))

所有帮助将不胜感激!

谢谢!

4

1 回答 1

2

好吧,这条线不符合您的要求:

(if (null? (or seq1 seq2))

在 Scheme 中,空列表为值;Scheme中唯一的错误值是#f。这意味着

(or '() '(a))

返回'​​()但是

(or '(a) '())

返回'(一)

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

如果您希望该行在任何一个列表为空的情况下返回 true,您将不得不重新考虑它。

然后是线

(cons seq2 '())

尝试自行测试该功能,看看会发生什么 - 这不是您需要的。如果您考虑一下,那条线应该会更简单。那时您实际上需要返回什么?

于 2012-10-06T20:19:21.797 回答