我是 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]).
您需要一个服务谓词,它接受您的 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).