2013-06-10 5 views
0

Я новичок в 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

Вам нужен служебный предикат, который принимает ваш номер и строит список из 1 в это. Затем рекурсия, увеличивая счетчик от 1 до номера, вызывая предикат службы и добавляя результат.

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(_, _, ....). 

Если Пролог имеет между/3 и FindAll/3, вы можете сделать в этом компактном виде:

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

у вас есть электронная почта? У меня действительно есть проблемы с каким-то прологовым кодом и нужна ваша помощь :( – Bambi

+0

вот моя, если вы не хотите писать сами, [email protected], если вы можете со мной связать, я действительно очень могущественна. – Bambi

+0

mazeCreator (Number, List): - findall (I/J, (между (1, Number, I), между (1, Number, J)), List). Работает, но вот вывод List = [1/1, 1/2, 1/3, 2/1, 2/2, 2/3, 3/1, 3/2, .../...]. Как удалить [... /. ..] и добавить 3/3 в список? – Bambi

Смежные вопросы