В Прологе математические выражения не выполняются с присваиванием, например =
.Prolog не использует присваивания, как многие распространенные языки программирования, Prolog использует унификацию.Если вы хотите выполнять математические выражения в Прологе и объединять результат с переменной, вам необходимо использовать оператор is / 2
I2 is Inc+V
N1 is V-1
. Вам также понадобится оператор guard, чтобы не выполнять второе предложение, есливторой параметр равен 0.
s(V,O) :-
p(0,V,O).
p(R,0,R).
p(Inc,V,R) :-
V \= 0,
I2 is Inc+V,
N1 is V-1,
p(I2,N1,R).
Теперь ваш запрос возвращает
?- s(9,O).
O = 45 ;
false.