開始使用prolog,我正在嘗試做一些簡單的練習,但是我很早就被卡住了......我想說的是:mike like anyone if這是一個男人或女人,它不是麥克。但X \= mike
似乎被忽略:Prolog謂詞( =)/ 2被忽略
man(mike).
man(danny).
man(samuel).
man(henry).
woman(samantha).
woman(jane).
woman(betty).
woman(jenny).
likes(mike, X) :-
man(X);
woman(X),
X \= mike.
邁克顯示出來......
?- findall(X, likes(mike, X), L).
L = [mike, danny, samuel, henry, samantha, jane, betty, jenny].
我想這是因爲序言評估規則man(X)
第一所以邁克是true
。但是,如果我將其更改爲:
likes(mike, X) :-
X \= mike,
man(X);
woman(X).
我只會找女人。
?- findall(X, likes(mike, X), L).
L = [samantha, jane, betty, jenny].
問題是如何做到這一點呢?謝謝!
注:我使用SWI-Prolog的
由於運算符優先級, '人(X);女人(X),X \ = mike.'被解釋爲'man(X); (女(X),X \ =麥克)。你可以用圓括號改變它,把';':'(man(X); woman(X)),X \ = mike.'分組。這也是你的第二個例子的問題之一。查看[運營商優先權]信息(http://www.swi-prolog.org/pldoc/man?predicate=op/3)。 – lurker
說'上市(如)'!它立即向您顯示問題。 – false
標題有點奇怪。實際上(\ =)/ 2不是一個規則,而是一個謂詞。這個謂詞用在規則中的字面上。 –