Writing Prolog Using an Operator

I have prolog instructions like this

verb('part_of-8'). noun('doctor_investigation_system-2'). noun('dis-4'). berelation('be-6'). verb('be-6'). noun('hospital_information_system-11'). noun('his-13'). rel('part_of-8', 'doctor_investigation_system-2'). rel('doctor_investigation_system-2', 'dis-4'). rel('part_of-8', 'be-6'). rel('part_of-8', 'hospital_information_system-11'). rel('hospital_information_system-11', 'his-13'). associatedWith(X,Y,Z) :- verb(Y), noun(X), noun(Z), X\=Y, Y\=Z, Z\=X, rel(X,Y), rel(Y,Z), not(beralation(X)), not(beralation(Z)), not(beralation(Y)). 

My goal is to get an association with (X, Y, Z), where X, Y, Z is not a โ€œberelationโ€, but the rule I wrote above does not work, what should I do to make it works

+4
source share
1 answer

I believe you are looking for a \+ "non-provable" operator

In this way:

 associatedWith(X,Y,Z) :- verb(Y), noun(X), noun(Z), X\=Y, Y\=Z, Z\=X, rel(X,Y), rel(Y,Z), \+ beralation(X), \+ beralation(Z), \+ beralation(Y). 

There is another way (without \+ , with ! "Cut"):

 associatedWith(X,_,_) :- berelation(X), !, fail. associatedWith(_,Y,_) :- berelation(Y), !, fail. associatedWith(_,_,Z) :- berelation(Z), !, fail. associatedWith(X,Y,Z) :- verb(Y), noun(X), noun(Z), X\=Y, Y\=Z, Z\=X, rel(X,Y), rel(Y,Z). 
+9
source

All Articles