Prolog创建具有连续数字的列表

时间:2013-06-10 16:59:00

标签: list prolog

我是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]).

1 个答案:

答案 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).