繁体   English   中英

带连续编号的序言创建列表

[英]Prolog creating list with consecutive numbers

我是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介于/ 3和findall / 3之间,则可以采用这种紧凑的方式进行操作:

mazeCreator(Number, List):-
  findall(I/J, (between(1, Number, I), between(1, Number, J)), List).

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM