當您調用member(Item, List)
時帶有一個不合乎規格的列表,Prolog統一併返回一個包含項目的列表。我想要一條規則返回true
/false
並且不會嘗試統一。有這樣的規則嗎?成員謂詞
Q
成員謂詞
1
A
回答
1
我會用一個後衛,像
is_member(E, L) :- nonvar(L), memberchk(E, L).
memberchk/2
它使用會員/ 2,確定性版本發現如果列表中包含至少1次出現的元素。不能作爲生成器,但效率更高。無論如何,守衛是必需的。
3
快速回復:使用\+ \+ member(Item, List)
。
請注意,當您的程序代表邏輯關係時,這樣的測試通常沒有多大意義。
您聲明member(Item, List)
「返回一個列表」。那麼這並不完全正確。 List
與部分列表統一,即List = [Item|_Rest] ; List = [_,Item|_Rest] ; ...
與_Rest
是一個未被證實的變量。也就是說,目標member(Item, List)
不保證(成功後)List
是一個列表。這是一個反例:member(Item, List), List = [_|nonlist]
相關問題
- 1. Prolog中的成員謂詞
- 2. Prolog成員謂詞可能性規則
- 3. 使用追加與成員謂詞
- 4. 序言 - 成員謂詞單線程
- 5. QueryDSL:從PathBuilder生成謂詞
- 6. 謂詞生成器包含
- 7. 內置謂詞成序言
- 8. 核心數據謂詞:謂詞未實現SQL生成
- 9. 會員謂詞問題,換一美元
- 10. 子句爲謂詞定義成員和構造子句even_member
- 11. 如何在一元謂詞中使用類成員變量?
- 12. 序言如果那麼否則會失敗,成員謂詞
- 13. 排序類成員具有自定義謂詞
- 14. 作爲謂詞的成員函數比較
- 15. 列表成員列表中的領域謂詞
- 16. 序言成員謂詞每個條目的重量
- 17. 查找匹配的謂詞。謂詞的謂詞?
- 18. Spring Data + QueryDSL空謂詞+謂詞鏈接
- 19. 序言:生成一個滿足謂詞的成員的子列表
- 20. 使用基於另一個謂詞的謂詞的謂詞過濾數組,這是謂詞的關鍵
- 21. RealmSwift ALL謂詞
- 22. 的XPath謂詞
- 23. 瞭解謂詞
- 24. SWI-Prolog謂詞
- 25. 克隆謂詞
- 26. 比較謂詞
- 27. Prolog powerset謂詞
- 28. 使用謂詞
- 29. Swift CoreData謂詞
- 30. FSharp謂詞
根據OP,'is_member(E,L)'應該是true,但是你的定義失敗。 – false
@false:好吧,您必須在OP問題中閱讀*非常*不同於我的內容。 – CapelliC
我讀到OP的問題,因爲如果給定一個實例化的'E'並且沒有實例化的'L',想要一個返回false的謂詞,它會失敗而不是返回包含'E'的'L'中的列表。然而,看起來他們接受了這個答案,所以也許他們沒有精確地指出他們的問題。 – lurker