above(L, N)
与えられた整数より大きい整数のそれぞれを (バックトラックで) 生成する述語を記述しL
ます。たとえば、目標above(3, N)
はソリューションとして生成される必要がN = 4; N = 5; N = 6; ...
あり、バックトラックの順序で生成されます。
上記のように。
「バックトラックでソリューションを生成する」ための一般的な戦略も素晴らしいでしょう。
above(L, N)
与えられた整数より大きい整数のそれぞれを (バックトラックで) 生成する述語を記述しL
ます。たとえば、目標above(3, N)
はソリューションとして生成される必要がN = 4; N = 5; N = 6; ...
あり、バックトラックの順序で生成されます。
上記のように。
「バックトラックでソリューションを生成する」ための一般的な戦略も素晴らしいでしょう。
length(_,N), N > 3.
length(_,I), N is I + 4.
これらは最も効率的なバージョンではありませんが、補助的な定義は必要ありません。
length([_,_,_,_|_],N).
より速いかもしれませんが、もう少しあいまいです。
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).