List 如何使用下划线变量搜索列表?(序言)

List 如何使用下划线变量搜索列表?(序言),list,prolog,List,Prolog,这里是我的问题,我收到各种带有下划线变量的列表(例如:[uu、\uu、A、\uu、\uu]或[\uu、A、B、\uu、\uu]),我需要在这些列表中搜索重要的值(在本例中为A或A和B) 这是可能的还是我试图用错误的方式解决这个问题 为了更好的上下文:我正试图在序言中制作一个cluedo类型的程序,你有你的线索,然后你从其他玩家那里收到线索并试图找到凶手,但我希望每个嫌疑犯都有一份清单(如[姓名、年龄、武器、个人物品]),所以你可以看到,每次你得到一个像武器一样的线索,我都会收到这样的清单 如果有

这里是我的问题,我收到各种带有下划线变量的列表(例如:[uu、\uu、A、\uu、\uu]或[\uu、A、B、\uu、\uu]),我需要在这些列表中搜索重要的值(在本例中为A或A和B)

这是可能的还是我试图用错误的方式解决这个问题

为了更好的上下文:我正试图在序言中制作一个cluedo类型的程序,你有你的线索,然后你从其他玩家那里收到线索并试图找到凶手,但我希望每个嫌疑犯都有一份清单(如[姓名、年龄、武器、个人物品]),所以你可以看到,每次你得到一个像武器一样的线索,我都会收到这样的清单

如果有人能帮忙,我将不胜感激


最好的问候

检查变量是否仍然是自由变量的方法是使用ISO谓词
var/1
nonvar/1
,如果它们的参数是自由变量或实例化的,则为真

因此,如果您有一个绑定了一些变量的列表,您可以说:

nonvar_member(M, List) :- member(M, List), nonvar(M).
该谓词将枚举(通过回溯与M统一)列表中非自由变量的元素:

?- nonvar_member(X, [2,_,_,3,A,1,_]).
X = 2 ;
X = 3 ;
X = 1 ;
false.

但总的来说,使用Prolog解决基于线索的谜题的例子有很多(也在Stackoverflow上),所以请先看看这些例子。

member/2应该足以满足典型用法。使用并理解nonvar/1将使OP走上一条艰难的道路。我必须承认我不理解。。。。你能详细解释一下吗?你的解释是正确的,但IMHO NONR/1不合适,甚至有误导性。@capelical:)显然我误导了自己,这就是为什么我想知道我没有得到什么,或者应该如何做。目前我对Prolog的理解就在愚人山附近@或者你是说这个答案: