【发布时间】:2014-04-10 02:11:36
【问题描述】:
我是 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 是幽灵的位置 (x,y,eaten?),Pellet 是所有小球位置 (x,y) 的列表,Decision 是 pacman 选择的输出。
第一个 findall 应该给我所有没有鬼魂且不危险的方向 (Dir),并将它们保存在名为 L 的列表中。
第二个 findall,我希望它给我所有有颗粒的方向并将它们保存在一个名为 T 的列表中。
我的问题是这个 findall 是否正确,因为我的代码由于某种原因无法正常工作,我认为这可能是因为第二个 findall。
谢谢你帮助我:)。
【问题讨论】:
-
所有这些论点!您的代码将是调试/维护的噩梦。关于调试,试试
?- spy(chooseNotDangerous).
标签: prolog pacman prolog-findall