2013-05-17 51 views
1

這裏是我的問題我收到各種列表,其中有下劃線變量(例如:[_,_,A,_,_]或[_,A,B,_,_]),我需要搜索那些重要的值列表(在這種情況下,A或A和B)如何使用下劃線變量搜索列表? (Prolog)

這是甚至可能或我試圖解決這個錯誤的方式。

爲了更好的方面:我試圖做一個妙探尋兇類型的節目在的Prolog,你有你的線索,然後您會收到來自其他玩家的線索,並試圖找到兇手,但我要爲一個列表每一個犯罪嫌疑人(比如[姓名,年齡,武器,個人物品]),每當你得到像武器這樣的線索時,你都可以看到我收到這樣一個列表[0124]如果任何人可以幫助我將不勝感激

最好的問候

回答

2

檢查變量是否仍然空閒的方法是使用ISO謂詞var/1nonvar/1,如果它們的參數是自由變量或實例化,則爲true。

所以,如果你有綁定一些變量列表,你可以說:

nonvar_member(M, List) :- member(M, List), nonvar(M). 

此斷言將列舉這是不是免費的名單的元素(與中號通過回溯統一)變量:

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

但完全的例子還有很多周圍(也#2)使用的Prolog解決基於線索的難題,因此要儘量看看那些第一。

+0

成員/ 2應該足以應付典型用法。使用 - 和理解 - nonvar/1會使OP處於困難的軌道上。 – CapelliC

+1

@CapelliC我必須承認我不明白....你能詳細說明嗎? – 2013-05-17 05:58:30

+0

你的解釋是合理的,但恕我直言nonvar/1是不恰當的,甚至誤導。 – CapelliC