-1

above(L, N)与えられた整数より大きい整数のそれぞれを (バックトラックで) 生成する述語を記述しLます。たとえば、目標above(3, N)はソリューションとして生成される必要がN = 4; N = 5; N = 6; ...あり、バックトラックの順序で生成されます。

上記のように。

「バックトラックでソリューションを生成する」ための一般的な戦略も素晴らしいでしょう。

4

2 に答える 2

3
   length(_,N), N > 3.

   length(_,I), N is I + 4.

これらは最も効率的なバージョンではありませんが、補助的な定義は必要ありません。

   length([_,_,_,_|_],N).

より速いかもしれませんが、もう少しあいまいです。

于 2012-04-26T17:27:31.390 に答える
1

2 つの句を含むプロシージャが必要になります。最初のものは、入力数 L に対して出力数 N を L+1 で統一する基本ケースです。2 番目の句は再帰的なステップで、L をインクリメントし、/2 の上で再帰的に呼び出すだけです。

above(L, NL):-
  NL is L+1.
above(L, NL):-
  ML is L+1,
  above(ML, NL).
于 2012-04-26T15:42:23.793 に答える