repeat, отсечение, 3 случая использования отсечения
Предикат repeat/0 обеспечивает повторное согласование уже выполн.
целей в процессе возврата. Обычно испол. для зацикливания преди-
катов, не имеющих альтернатив, например, в правиле
Процесс док-ва в Прологе основывается на поиске в глубину. Сначала
выбирается 1-я по порядку альтернатива, кот. м.б. исп. для док-ва цели.
Если неуспех, т.е. происх-т возврат в точку выбора и выбирается след
альтернатива и т.д. Процесс продолжается пока не будет доказан запр.
Предикат отсечения ! позволяет уменьшить простр-во поиска и сократ.
перебор, отбрасывая неиспольз. альтернативы.
Рез-ты отсечения:
1)отбрас. все предл-я для согл. цели, расп. после правила, содерж. !
2)отбрас. все альтернат. решения конъюнкции целей, располож. в
предлож. левее !
3)! не влияет на цели, расположенные правее него. В случае возврата
они могут порождать альтерн. решения. Если док-во этих целей будет
неуспешным, происходит возврат к последнему выбору, сделанная
перед выбором предложения, содерж отсечение.
3 случая использования отсечения:
1)подтверждение правильности выбора правила: отсечение фиксир.
выбор правила, повышает эффект-ть программы за счет отбрасывания
неподходящих альтернатив.
2)прекращение док-ва цели: предикат м.б. заведомо ложным для некоторых аргументов или м.б. неприменим к аргументам опред. вида. Удобно выделять такие исключ. в отдельн. правила, уменьшая т.о. сложность определ-я. Это можно сделать с пом. комбинации «отсеч-е-
неудача».
3)завершение последоват-ти порождения и проверки вариантов:
цели в Прологе м.б. согласованны множ-ом различных способов и порождают много возможных решений при возврате. С пом-ю отсеч-я
можно завершить порождение альтерн. решений, если в них нет необходимости, или существуют только единств. решение.
8. Встроенные предикаты для классификации термов.
Логические предикаты, особенности использования отрицания.
1)var(X) проверяет является ли X неконкретизир-й переем-ой.
nonvar(X) X конретизир-я перем-я.
atom(X) является ли X атомом.
integer(X)-целое число, float(X)-веществ. число, number(X)-число,
atomic(X)-X- число или атом.
2)Простейшие логич. предикаты- true и fail. Для конъюнкции целей исп
‘,’, для дизъюнкции ‘;’.
Для отрицания используется not(X). Т.к. запятая служит для кон. целей,
так и для раздел-я аргументов, требуются доп. скобки, если аргумент в
not не явл. элемнент. выражением. (not((A,B))!!!).
IF THEN ELSE-> (A,B;not(A),C) или (A,B;C). IF THEN-> (A,B:true).
:-op(1160,fx,если). :-op(1150,xfx,то). :-op(1155,xfx,иначе).