1

私はこのプログラムをSchemeで実装するのに少し苦労していますが、90%は達成できたと思います。残念ながら、これは宿題なので、少し曖昧にする必要があります。

入力として 1 つのリストを取得し、リストのすべての可能なサブシーケンスを生成し、特定の基準に一致する 1 つを返す必要があります。リストのすべてのサブシーケンスを生成し、特定のサブセットが解かどうかを判断するコードを完成させました。ただし、Scheme がそのソリューションを返すのに問題があります。私のコードは基本的に今このように見えます

(define (function rest_of_list subsequence)
    (if (subsequence is a solution) subsequence)
    (if (> (length rest_of_list) 0) (function (cdr rest_of_list) (append subsequence (car rest_of_list))))
    (if (> (length rest_of_list) 0) (function (cdr rest_of_list) subsequence)))

このコードがすべきことは、リスト内の各要素に対して、2 方向に再帰的に分岐することです。一方向では、サブシーケンスに (car rest_of_list) を追加し、リストを下に続けます。逆方向では (car rest_of_list) を無視し、リストを下に進みます。受け入れ可能なサブシーケンスを見つけるとすぐに、それを返します。これが function と呼ばれる関数の結果です。現在、空白の出力が得られます。そして、私は推測する理由をある程度理解していますが、これを修正するには十分ではありません.

4

1 に答える 1

1

実装の正確な詳細を見ないと少し注意が必要ですが、次の行に沿って何かを行います。

(define (function rest_of_list subsequence)
  (cond ((null? rest_of_list)
         '())
        ((subsequence is a solution)
         subsequence)
        (else
         (combine (function (cdr rest_of_list) (append subsequence (car rest_of_list)))
                  (function (cdr rest_of_list) subsequence)))))

興味深い部分は、combine両方の分岐方法consです。. また、ベース ケースが欠落している可能性があることにも注意してください。リストの残りの部分が null の場合はどうなるでしょうか。

于 2012-11-09T15:59:47.987 に答える