0

私は Prolog の初心者で、リストを作成しようとしました。たとえば、mazeCreator(3,List) と書くとします。リスト内の 1/1,1/2,1/3,2/1,2/2,2/3,3/1,3/2,3/3 のようなすべての番号をプッシュしたい.これを行うには、述語を書いたのですがうまくいきません。どなたか教えていただけませんか?前もって感謝します!。

mazeCreator(Number,[List]):-
    Number1 is Number-1,
    mazeCreator(Number1,[Number / 1|List]).
4

1 に答える 1

-1

Number を受け取り、1 からそれまでのリストを作成するサービス述語が必要です。次に、カウンターを 1 から Number にインクリメントして再帰し、サービス述語を呼び出して結果を追加します。

mazeCreator(Number, List) :-
  mazeCreator(1, Number, [], List).

mazeCreator(Index, Number, Built, List) :-
  Index =< Number,  % don't forget the check the limit
  make_list(Index, Number, Temp), % call service predicate
  append(Built, Temp, Other),
  % increment Index and recurse
  ...

% dont' forget the base case (i.e. when Index is not =< Number, equate Built and List)
mazeCreator(_, _, ....).

Prolog に between/3 と findall/3 がある場合、次のコンパクトな方法で実行できます。

mazeCreator(Number, List):-
  findall(I/J, (between(1, Number, I), between(1, Number, J)), List).
于 2013-06-10T17:10:16.997 に答える