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 回答