1

2 つのリストと負でない整数の引数を取るプロシージャを定義しようとしています。完全な入力を仮定します。最初のリストの要素のリストを、指定された要素の整数に達するまで作成したいのですが、その時点で、2 番目のリストの残りの要素で終了したいと考えています。実演させてください。

~(combine '(a b c d e) '(w x y z) 2)
(a b y z)

2 番目のリストは、ずっと 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の唯一の false 値は#fです。つまり、

(or '() '(a))

'()を返しますが、

(or '(a) '())

'(a) を返します

したがって、null のチェックでは #t が返されるのは半分の時間だけです。(そして、通常の Lisp のように'()が偽の値である場合、それは決して機能しないので、あなたが何を考えているのかわかりません)。

リストのいずれかが null の場合にその行が true を返すようにするには、再考する必要があります。

それからラインがあります

(cons seq2 '())

その機能を単独でテストして、何が起こるかを確認してください。それは必要なものではありません。考えてみれば、その行はかなり単純なはずです。その時点で実際に何を返す必要がありますか?

于 2012-10-06T20:19:21.797 に答える