[英]Prolog creating list with consecutive numbers
I'm newbie in Prolog and I've tried to create a list. 我是Prolog的新手,因此尝试创建列表。 For example when I write mazeCreator(3,List). 例如,当我编写mazeCreator(3,List)时。 I want to push every number like 1/1,1/2,1/3,2/1,2/2,2/3,3/1,3/2,3/3 in a list.To do this, I wrote a predicate but It does not work, Is there anyone who can help me ? 我想在列表中推送像1 / 1,1 / 2,1 / 3,2 / 1,2 / 2,2 / 3,3 / 1,3 / 2,3 / 3之类的每个数字。为此,我写了一个谓词,但它不起作用,有人可以帮助我吗? Thanks in advance!. 提前致谢!。
mazeCreator(Number,[List]):-
Number1 is Number-1,
mazeCreator(Number1,[Number / 1|List]).
You need a service predicate that takes your Number and construct a list from 1 to that. 您需要一个服务谓词,该谓词接受您的Number并构造一个从1到该数字的列表。 Then recurse, incrementing a counter from 1 to Number, calling the service predicate and appending the result. 然后递归,将计数器从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(_, _, ....).
If your Prolog has between/3 and findall/3, you can do in this compact way: 如果您的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.