Если заявление в прологе

Здравствуйте, у меня есть проблема с оператором 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 ответа

Как это:

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 сказуемое.:)

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

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').
Другие вопросы по тегам