views:

33

answers:

2

I am new to learning prolog, and I want to know, if we have some procedure like

father("Nic","Adam").  

and I want to write a function that it will add new value to this

father("Nic","Adam","something"..) 

how can I do this? Using list? Or what?

A: 

Simply writing

father(nic, adam). 

As a predicate already defines it. It is like stating a fact: you declare that father(nic, adam) is true, then you can execute the following with these expected results :

?- father(nic, adam).
Yes

?- father(nic, X).
X = adam
Dynami Le Savard
+1  A: 

Quick answer: You don't want to do that.

Longer answer: The father/2 predicate has a certain meaning, namely that for father(X,Y) X is the father of Y. A father/3 predicate is a different thing altogether. What do you want to achieve with that third argument? Normally, you use additional rules, which derive things from the father/2 predicate, or even resolve it to a father/3 argument.

The main question remains: what's the purpose of the third argument? If you want your resolution to work for certain specific 3rd arguments based on the existance of a corresponding father/2 predicate for example, you could do father(X, Y, 'something') :- father(X,Y) which will succeed if you have a corresponding father/2 fact.

PS: Do learn your terminology. In Prolog we don't speak of procedures and we don't write functions. Instead we have predicates, facts, rules, ...

PPS: I am not sure which Prolog implementation you are using, but you might want to use 'something' instead of "something". The latter usually creates a list of character codes, not a string:

?- X = 'some'.
X = some.

?- X = "some".
X = [115, 111, 109, 101].
Frank