2

リストをそれ自体に渡し、各レベルでそのリストに要素を追加する再帰関数を作成しようとしています。最終的なリストは、述語の解決策として報告される必要があります。しかし、これを行う方法がわかりません。問題の形式は基本的に次のようになります。

solve(List, NumberOfSteps) :- NumberOfSteps = 10 . //Stops after 10 recursive steps
solve(List, NumberOfSteps) :-
    append NumberOfSteps to List,
    NumberOfStepsIncremented is NumberOfSteps + 1,
    solve(List, NumberOfStepsIncremented) .

ここでは、solve(List, 1) を呼び出して、Prolog に次のような答えを返してもらいたいと思います。

List = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ;
true

Prolog にリストを作成してもらい、最後に印刷することができます。組み込みの予測値 append(List, NumberOfSteps, List2) を使用し、List2 を再帰を介して渡して最後に出力することでこれを行うことができますが、List と List2 はそこで統一されておらず、Prolog が提供する実際の答えは私はリスト= []です。真実

問題に間違った方法でアプローチしているような気がしますが、行き詰まっています!

ありがとう。

4

2 に答える 2

1

私はそれを考え出した。これはそれがどのように見えるべきかでした:

solve(List, NumberOfSteps) :- NumberOfSteps = 10 . //Stops after 10 recursive steps
solve([LHead | LTail], NumberOfSteps) :-
    LHead = NumberOfSteps,
    NumberOfStepsIncremented is NumberOfSteps + 1,
    solve(LTail, NumberOfStepsIncremented) .
于 2012-10-14T18:06:48.807 に答える
1

Will Ness によるコメントをあなたの回答に拡張し、より簡単な修正を示します。

solve([NumberOfSteps], NumberOfSteps) :-
    NumberOfSteps = 10, !. % Stops after 10 recursive steps
solve([LHead | LTail], NumberOfSteps) :-
    LHead = NumberOfSteps,
    NumberOfStepsIncremented is NumberOfSteps + 1,
    solve(LTail, NumberOfStepsIncremented) .
于 2012-10-15T12:11:30.453 に答える