Если заявление в прологе - PullRequest
1 голос
/ 23 февраля 2012

Здравствуйте, у меня проблема с оператором if. у меня есть это

final(C1-W1,C2-W2,C3-W3):- 
    retractall(end_jug), 
    asserta( end_jug(C1,W1) ),
    asserta( end_jug(C2,W2) ),
    asserta( end_jug(C3,W3) ).

и этот

katastasi(L) :- 
    findall(X-W, jug(X,W), L0), sort(L0,L).

Как я могу получить этот чек ????:

    if(jug(C1,W1) == end_jug(C1,W1) && jug(C2,W2) == end_jug(C2,W2) && jug(C3,W3) == end_jug(C3,W3)) write('Congrats').

Заранее спасибо !!

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Как это:

is_final_state :- 
  katastasi(S), writeln(S),
  S=[C1-W1,C2-W2,C3-W3],
  (  end_jug(C1,W1),
     end_jug(C2,W2),
     end_jug(C3,W3)
  -> writeln('Congrats!')
  ;  W1+W2+W3 < 6
  -> writeln('WARNING: not enough water left!'),
     fail
  ).

Вы должны были упомянуть ваш предыдущий вопрос . Этот код является частью кода в ответе.

Ваш код написан на Прологе, но проверка, о которой вы спрашивали, была в "Основном". Отпусти основной менталитет. :) Пролог делает проверки для вас, как часть объединения.

Значение 6 в приведенном выше коде должно быть действительно рассчитано в соответствии с окончательными значениями, которые пользователь указывает, вызывая final в начале игры. Окончательное значение (каждого end_jug факта) может быть получено так же, как текущее значение (каждого jug факта) извлекается с помощью предиката jugsState (который, как я предполагаю, теперь называется katastasi).

Теперь вы должны завершить свою игру, написав предикат stop, который должен выполнить очистку (т. Е. Вызвать retract для всех утвержденных фактов). Вы даже можете сделать предикат undo. :)

0 голосов
/ 23 февраля 2012

Просто напишите условия, к которым присоединяется ,, в новом предикате:

win(C1, W1, C2, W2, C3, W3):-
    jug(C1,W1) \== end_jug(C1,W1),
    jug(C2,W2) \== end_jug(C2,W2),
    jug(C3,W3) \== end_jug(C3,W3).

Затем используйте этот предикат при необходимости.

finish(C1, W1, C2, W2, C3, W3):-
    win(C1, W1, C2, W2, C3, W3),
    write('Congrats').

Или напишите в целом:

finish(C1, W1, C2, W2, C3, W3):-
    jug(C1,W1) \== end_jug(C1,W1),
    jug(C2,W2) \== end_jug(C2,W2),
    jug(C3,W3) \== end_jug(C3,W3),
    write('Congrats').
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...