Пролог добавить функцию - PullRequest
0 голосов
/ 30 августа 2018

Я новичок в Прологе. У меня есть такие факты:

user(alice). 
user(bob).
money(alice,10).
money(bob,20).

Факты означают, что у Алисы 10 долларов и 20 долларов. Для изучения Пролога я хочу разработать функцию для перевода денег между двумя пользователями. Моя функция должна ввести имя получателя и сумму и добавить количество к получателю.

example: add(alice,20)

и вывод должен быть 30. На самом деле моя функция:

add(X,Y,Z) :- Z is money(X,M) + Y.

но это не работает.

Как я могу это реализовать? Спасибо

1 Ответ

0 голосов
/ 30 августа 2018

Во-первых, когда вы хотите изменить факты для предиката 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).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...