2016-12-28 2 views
1

В Prolog мои факты таковы.Использование не равного оператору в Prolog

flows(godavari,andhra). 
flows(krishna,telangana). 
flows(krishna,andhra). 

Я хочу сформулировать запрос для списка рек, протекает через Андхра, но не в Telangana.

Я попытался с

fl(X,Y,Z):- flows(X,Y), flows(X,Z). 

, который перечисляет все реки, которые проходят через Y и Z.

хочу река проходит через Y и Z. не

ответ

1

Просто использовать Оператор not:

fl(X,Y,Z) :- flows(X,Y), not(flows(X,Z)). 
+0

'not/1' устарел. '(\ +)/2' - это« не доказуемый »предикат ISO:' \ + flow (X, Z) '. – lurker

+0

@ lurker это прекрасно работает, но что такое «не доказуемый предикат»? – Selvaperumal

+0

"not provable" - это то, что 'not/1' и' (\ +)/1' действительно означают. Дополнительную информацию см. В документации. Да, 'not/1' будет работать, но он не поддерживается во всех прологах. '(\ +)/1' является стандартным предикатом ISO. – lurker