Как принять одну из двух конфигураций аргументов предикатов - PullRequest
0 голосов
/ 07 апреля 2019

Скажем, у меня есть две переменные A и B и два предиката firstPred () и secondPred ()

Я пытаюсь выразить что-то вроде:

(firstPred(A) && secondPred(B)) || (firstPred(B) && secondPred(A))

Iв настоящее время есть

firstPred(A),
secondPred(B).

, но это касается только первого случая.Как я могу добавить поддержку второго?

1 Ответ

1 голос
/ 07 апреля 2019

Ссылка на предикаты в Прологе использует обозначение Name/Arity, где Arity - количество аргументов. Поэтому вместо написания firstPred() и secondPred() пишите вместо firstPred/1 и secondPred/1. Еще лучше, следуя рекомендациям по кодированию Prolog, используйте подчеркивание вместо CamelCase при именовании предиката.

Чтобы ответить на ваш вопрос, вам нужно определить предикат для проверки вашего состояния. Этот предикат будет принимать два аргумента. Прямой перевод вашего состояния будет:

condition(A, B) :-
    (   first_predicate(A),
        second_predicate(B)
    ;   first_predicate(B),
        second_predicate(A)
    ).

Но это не считается хорошим стилем, и вместо него предпочтительнее использовать два предложения:

condition(A, B) :-
    first_predicate(A),
    second_predicate(B)
condition(A, B) :-
    first_predicate(B),
    second_predicate(A).

Обратите внимание, что это решение предполагает, что дизъюнкция в условии не является исключительной дизъюнкцией. Это тот случай?

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