Пролог простой вопрос - PullRequest
2 голосов
/ 09 июня 2010

Я все еще выясняю, как на самом деле работает пролог, и пытался разработать небольшую тестовую программу с инструкцией if, но на самом деле не могу получить нужное мне значение.дать Sy в качестве ответа вместо true, чтобы я мог использовать это в качестве аргумента другого предиката.этот код выдает ошибку, когда условие ложно, я пытался сделать:

prog([],[],Sy).
prog(Sx,Sy) :- 
    Sx > 0 -> 
        update(Sx,10,S1), update(S1,10,S2), prog(S2,S2) ;
        prog([],[],Sy).

Но просто возвращает true.

Кто-нибудь может сказать мне, как заставить его вернуть Sy?*

Спасибо

1 Ответ

1 голос
/ 10 июня 2010

Правила Пролога не «возвращают» значения, и шаблон со стрелкой и точкой с запятой не самый идиоматичный способ сделать это Вместо этого вы должны использовать два правила, по одному для каждого случая Sx. Я не уверен, что вы пытаетесь представить своим примером. Какое значение вы ожидаете от Sy, если Sx не больше нуля? Предполагая, что вы хотите, чтобы Sy был Sx в этом случае:

prog(Sx, Sy) :- Sx > 0, update(Sx,10,S1), update(S1,10,S2), prog(S2,Sy).
prog(Sx, Sx) :- Sx <= 0.

Чтобы использовать это с другим предикатом, вы должны сделать что-то вроде этого:

prog(40, V),
write(V),
prog(V, Z),
write(Z).

И так далее, со вторым параметром, связанным с «ответом» в каждом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...