递归函数Prolog

时间:2018-05-19 13:59:09

标签: prolog

我是Prolog的新手。不能真正了解它是如何运作的。

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")).

地图是一个列表。我正在每次递归调用中更改它,我可以通过write func在输出中看到它。但是我希望在我调用它的地方获得更改的Map。但我没有在那里获得更新的地图。怎么做到的?
提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,您对此谓词计算并打印出来的employee的值感到满意,并且您只希望能够“传回”或“返回”给来电者。

Prolog中谓词之间的所有数据传递都是通过谓词参数完成的。因此,您需要为Map2谓词添加额外的参数:

fillmap

当你调用这个谓词时,传入一个新的变量fillmap([HF|TF], [HG|TG], L, X, Y, Map1, Map2):- ... % your code exactly as before 作为最后一个参数,并且在调用之后该变量将被绑定到新的地图。