我是 prolog 的初学者,我正在尝试使用 netlogo 和 prolog 让 pacman 自行移动。所以这是我的代码的一部分:
walkfront(_,_,_,_,_,_,Pacman,DirP,Lab,Ghost,_,Pellet,_,_,Decision) :-
findall(Dir,
( member(Dir,[0,90,180,270]),
\+ ( member((G,false),Ghost), dangerous(Pacman,G,2,Dir,_) ) ),
L),
findall(Dir,(member(Dir,[0,90,180,270]),(member(P,Pellet))),T),
chooseNotDangerous(L,Pacman,DirP,Lab,Dir,T)
walkfront(_,_,_,_,_,_,Pacman,DirP,Lab,Ghost,_,Pellet,_,_,Decision)
这一行包含我从 netlogo 获得的所有信息列表,Pacman 有 pacman (x,y) 的位置,DirP 是 pacman 面对的方向,Lab 是迷宫中的空闲空间,Ghost 是ghosts (x,y,eaten?),Pellet 是所有小球 (x,y) 位置的列表,Decision 是 pacman 选择的输出。
第一个 findall 应该给我所有没有鬼和不危险的方向 (Dir),并将它们保存在一个名为 L
的列表中。第二个 findall,我希望它给我所有有的方向颗粒并将它们保存在一个名为 T 的列表中。
我的问题是这个 findall 是否正确,因为我的代码由于某种原因无法正常工作,我认为这可能是因为第二个 findall。
感谢你们对我的帮助 :)。