这是我的问题,我收到各种带有下划线变量的列表(例如:[_,_,A, _, _]或[_,A, B, _, _]),我需要在这些列表中搜索重要的值(在本例中为A或A and B)
这是可能的吗?还是我试图用错误的方式解决这个问题?
对于更好的背景:我试图在Prolog中制作一个cluedo类型的程序,你有你的线索,然后你从其他玩家那里获得线索,并试图找到凶手,但我想为每个嫌疑人提供一个列表(像这样[姓名,年龄,武器,个人物品]),所以你可以看到每次你得到像武器这样的线索时,我都会收到这样的列表[_,_,刀,_]
如果有人能帮助我,我将感激不尽。
致以最美好的祝愿
检查变量是否仍然是自由的方法是使用ISO谓词var/1
和nonvar/1
,如果它们的参数是自由变量或实例化,则为true。
那么,如果你有一个绑定了一些变量的列表,你可以说:
nonvar_member(M, List) :- member(M, List), nonvar(M).
此谓词将枚举(通过回溯与M统一)List中非自由变量的元素:
?- nonvar_member(X, [2,_,_,3,A,1,_]).
X = 2 ;
X = 3 ;
X = 1 ;
false.
但总的来说,有很多例子(也在Stackoverflow上)使用Prolog来解决基于线索的谜题,所以尝试先看看那些。