Prolog programm returns yes instead of value
prolog
Solution
There are no return values in Prolog and p3/1 does not constitute a function but a relation. Your definition
p3(C) :-
item(C,_,_,P).
reads: If `item(C,_,_,P)` succeeds then `p3(C)` succeeds as well. For the sake of argument, let's assume that your code includes the following fact:
item(n3001,100,1.25,1).
If you query
?- p3(n3001).
Prolog unifies `C` in the head of your rule with `n3001` and then tries your goal `item(C,_,_,P)` which succeeds. Hence the rule succeeds and Prolog tells you:
?- p3(n3001).
yes
If you want to know the price corresponding to `n3001` you have to to define a rule where `P` appears in the head of the rule as well, e.g.:
p3(C,P) :-
item(C,_,_,P).
If you query that you'll get to see the value of `P` corresponding to `n3001`:
?- p3(n3001,P).
P = 1
If you query item/4 directly `P` appears in the arguments and therefore you get to see a substitution for it that satisfies your query:
?- item(n3001,_,_,P).
P = 1
Problem
I got the following event: item(C,X,G,P), (where `C` is a number for the product,`X` it's name,`G` it's price,`P` it's cost). When i use the command `item(n3001,_,_,P)` directly on the prolog console i get as answer `G = 1.25 X = 100` but when i write the equation `p3(C)-: item(C,_,_,P).` then i consult the text i get as answer `yes`. My question clarified is how come the one time i get the value of `P` which i want and the other time i get whether it's true or false?