简体   繁体   English

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

[英]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.

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