递归func-Prolog

递归func-Prolog,prolog,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的输出中看到它。但我想

我不熟悉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的输出中看到它。但我想在我称之为地图的地方换一张地图。但是我没有得到那里的最新地图。如何得到它?

提前感谢。

如果我正确理解了您的问题,您对由该谓词计算并打印出来的
Map2
的值感到满意,您只希望能够将其“传递回”或“返回”给调用者

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

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

调用此谓词时,传入一个新变量
NewMap
作为最后一个参数,调用后该变量将绑定到新映射。

我之前确实尝试过。但它不起作用。我猜我做错了什么。这是谓词'fillmap([HF | TF],[HG | TG],L,X,Y,Map1,Map3):-。。。。。替换(EX,EY,none),Map1,(EX,EY,HF),Map2。。。。(L1>0->fillmap(TF,TG,L1,EX,EY,Map2,Map3);write(“G=0”)。”我正在调用这个`fillmap(F,G,L,R,C,SX,SY,Map,Map,NewS):-fillmap(F,G,L,SX,SY,Map,NMap),write(“\NMap:”),write(NMap),NewS=[R,C,SX,SY,NMap]。`@TeenuTTT使
fillmap([HF|TF],[HG|TG],L,X,Y,Map1,Map3):-…(L1>0->write(“G0”),fillmap(TF,TG,L1,EX,EY,Map2),write(“G=0”),Map3=Map2)。
什么是
find/3
替换/4?