0
votes

I'm newbie in Prolog and I've tried to create a list. For example when I write 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 ? Thanks in advance!.

mazeCreator(Number,[List]):-
    Number1 is Number-1,
    mazeCreator(Number1,[Number / 1|List]).
1

1 Answers

-1
votes

You need a service predicate that takes your Number and construct a list from 1 to that. Then recurse, incrementing a counter from 1 to Number, calling the service predicate and appending the result.

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:

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