Как перевести следующий аргумент в Prolog? Кажется, что ему не нужны предикаты. (Примечание: Я использую & для связи и | для дизъюнкции.)Преобразование аргумента логики пропозиции в Prolog
G -> (H & J)
(H | J) -> S
S | R
Ⱶ G -> R
Кроме того, как бы я обратиться к базе данных Пролога, чтобы определить, что (G -> R) является ложным и аргумент, следовательно, недействительным? Это было в то время.
(Да, это для домашних заданий Профессор попросил нас, чтобы доказать аргумент, но он не действует, если G, H, J и S являются истинными и R является ложным.).
Edit:
на основании ответа Даниила, я написал это:
boolean(true).
boolean(fail).
argument(G, H, J, R, S) :-
boolean(G),
boolean(H),
boolean(J),
boolean(R),
boolean(S),
(G -> R) ->
(G -> (H , J)),
((H ; J) -> S),
(S ; R).
Но когда я запускаю его, я получаю это:
?- argument(G, H, J, R, S).
G = H, H = J, J = R, R = S, S = true.
Как я могу получить его, чтобы показать ошибку?
Edit # 2:
Теперь у меня есть это:
boolean(true).
boolean(false).
argument(G, H, J, R, S) :-
boolean(G), boolean(H), boolean(J), boolean(R), boolean(S),
(((G -> R); true) ->
((G -> (H , J); true),
((H ; J) -> S; true),
(S ; R))); true.
Он проходит через все успешные случаи, как и следовало ожидать Пролог сделать, но я действительно хочу, чтобы это также показать когда аргумент недействителен, т.е. когда предикат терпит неудачу. Я не знаю, как это сделать.
Простейшая вещь, которую я могу придумать, чтобы получить случаи сбоя, состоит в том, чтобы вытащить строку 'boolean (G), ...' в отдельный предикат, затем 'write/1' свои значения перед вводом аргумента/5', а затем напишите «да» или «нет» в зависимости от успеха. Вы также можете указать в этом пункте аргумент '\ + (...), который отрицает вызов. –