Предикат не имеет возвращаемого значения.
Чтобы смоделировать возвращаемое значение, вы можете добавить еще один аргумент:
add_numbers(X,Y):-
Return is X+Y.
станет
add_numbers(X,Y,Return):-
Return is X+Y.
и при вызове вы будете использовать переменную:
?- add_numbers(4,3,Result).
Result = 7.
обратите внимание, что вы также можете назвать это так:
?- add_numbers(4,3,7).
true
но также:
?- add_numbers(4,3,8).
false
но сделать вызов add_numbers(X,2,7
невозможно, потому что мы использовали арифметику.
тем не менее, вы можете использовать много предикатов.
например, в прологе есть встроенный предикат с именем append/3
.
обычно вы используете это так:
?-append([1,2],[3,4],X).
X=[1,2,3,4]
но вы также можете использовать его так:
?- append(X,Y,[1,2,3]).
X = [],
Y = [1, 2, 3] ;
X = [1],
Y = [2, 3] ;
X = [1, 2],
Y = [3] ;
X = [1, 2, 3],
Y = []