0

null 値を含む可能性のあるリストがあります。ただし、これらの null 値は無視するつもりです。私のリストの例は次のとおりです。
(() () MC+ () MD- () () ME+)

私の手順では、これらの要素を繰り返し処理し、let を使用して、このリスト内の 1 つの要素にバインドするローカル バインド変数を作成しています。ただし、値が null でない場合にのみ、変数をバインドできるはずです。現在、私は次のようにしています:

(let* ([disjunct (car disjunct-list)])

ただし、その要素が null でない場合にのみ、disjunct に値を割り当てる必要があります。これは、disjunct に割り当てられる値が次のようになることを意味します。MC+

すべての値を反復処理し、次の非 null 値を選択して に割り当てる必要がありdisjunctます。

もう1つ、私は今後さらに操作を行っていdisjunctます。そして再帰的に、リストの残りの行を下に渡します。したがって、次にこのプロシージャを再帰的に呼び出すときdisjunctは、値がMD-. それを使用(cdr disjunct-list)すると、次のリストを取得できるはずです。(() MD- () () ME+)

これはどのように行うことができますか?

4

1 に答える 1

1

入力リストを最初から (実際に再帰プロシージャに渡す前に) フィルタリングすることで、厄介な空のリストを安全に無視して、実際の値だけに集中できます。例えば:

(define disjuncts (filter (lambda (e) (not (null? e)))
                          '(() () MC+ () MD- () () ME+)))
(car disjuncts)
=> 'MC+

(cadr disjuncts)
=> 'MD-

(caddr disjuncts)
=> 'ME+
于 2015-03-08T13:15:23.503 に答える