我是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]).
答案 0 :(得分:-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介于/ 3和findall / 3之间,你可以用这种紧凑的方式做到:
mazeCreator(Number, List):-
findall(I/J, (between(1, Number, I), between(1, Number, J)), List).