Несколько утверждений в определении отношения (предиката) рассматриваются как альтернативные варианты одного и того же отношения. Поэтому для реализации ветвления следует создать новое отношение, в описании которого должно быть столько утверждений, сколько ветвей. В теле каждого утверждения должны быть описаны условия, при которых выполняется эта ветвь. Условия следует формулировать так, чтобы они взаимно исключали друг друга. Тогда всегда будет выполняться одна ветвь, и при возникновении возврата остальные ветви окажутся ложными и рассматриваться не будут.
Пример. Рассмотрим функцию, имеющую два альтернативных определения:
Z | = | целая часть(L/K), если L>0 остаток(L/K), если L≤ 20 |
На Прологе такая функция может быть описана с помощью двух правил:
fun(L,K,Z):- L>20, Z = L div K.
fun(L,K,Z):- L<=20, Z= L mod K.
5.3. Использование предиката fail
В Прологе имеется встроенный предикат fail, который всегда имеет значение ”ложь”. Предикат не имеет аргументов.
Этот предикат нужен потому, что бывают моменты, когда полезно в процессе выполнения сгенерировать неудачу. Одно из применений предиката fail – создать процесс возврата для получения всех ответов на запрос или всевозможных вариантов решения некоторой задачи.
Пример. Рассмотрим фрагмент программы ”Предоставление сведений”: