Во-первых, когда вы хотите изменить факты для предиката money/2
, когда пользователи обмениваются деньгами, вам необходимо объявить динамику предиката:
:- dynamic(money/2).
Во-вторых, поскольку Prolog является реляционным языком, а не функциональным языком, вы не можете писать выражения как Z is money(X,M)
. Вместо этого вам нужно написать что-то вроде:
add(User, Money) :-
% remove old clause and access how much money the user holds
retract(money(User, Current)),
% compute the updated amount of money the user will be holding
Updated is Current + Money,
% add updated fact
assertz(money(User, Updated).