Рекурсивный функционал Пролог - PullRequest
0 голосов
/ 19 мая 2018

Я новичок в Прологе.Не могу понять, как это работает.

fillmap([HF|TF],[HG|TG],L,X,Y,Map1):-
   ...
   replace((EX,EY,none),Map1,(EX,EY,HF),Map2),
   ...
   (L1>0-> write("G0"),fillmap(TF,TG,L1,EX,EY,Map2);
   write("G=0")).

Карта - это список.Я изменяю его в каждом рекурсивном вызове, и я могу видеть это в выводе с помощью команды func.Но я хочу получить измененную Карту, где я ее называю.Но я не получаю обновленную Карту там.Как это получить?
Заранее спасибо.

1 Ответ

0 голосов
/ 19 мая 2018

Если я правильно понимаю ваш вопрос, вы удовлетворены значениями для Map2, которые вычисляются этим предикатом и распечатываются, и вы просто хотите иметь возможность "передать его назад" или "вернуть его"caller.

Вся передача данных между предикатами в Прологе осуществляется через аргументы предикатов.Поэтому вам нужен дополнительный аргумент для предиката fillmap:

fillmap([HF|TF], [HG|TG], L, X, Y, Map1, Map2):-
    ...   % your code exactly as before

Когда вы вызываете этот предикат, передайте свежую переменную NewMap в качестве последнего аргумента, и после вызова эта переменная будет связанана новую карту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...