printЛогическое программирование

printАрифметические и логические выражения

Роль арифметических предикатов, встроенных в Пролог, заключается в обеспечении интерфейса с арифметическими возможностями компьютера.
Так как аргументы предикатов в Прологе не вычисляются, а передаются в виде термов, в следующем запросе структура +(2,2) не сопоставима с числом 4:
?-2+2=4.
no
Поэтому необходимые арифметические вычисления должны быть произведены до момента согласования цели. Для этого используется предикат X is Y, который интерпретирует терм Y как арифметическое выражение, вычисляет его и сопоставляет результат с термом X. Выражение должно состоять из чисел, стандартных операций сложения (+), вычитания (), умножения (*), деления (/), остатка от деления (mod и rem), деления нацело (// и div), возведения в степень (^) и математических функций (sqrt, integer, random, sin, cos и т.д.). Если терм Y не является корректным арифметическим выражением, содержит неконкретизированные переменные, атомы, неизвестные операции или функции, то выводится сообщение об ошибке.
?-X is 2*2.
X=4
?-4 is 2*2.
yes
Другими арифметическими предикатами являются предикаты сравнения X=:=Y, X=\=Y, X>Y, X<Y, X=<Ysmilies/remark.gif, X>=Y, которые вычисляют термы X и Y как арифметические выражения и сравнивают численные результаты.
?-2+2=:=2*2.
yes
Пролог позволяет формировать сложные логические выражения. Простейшими логическими предикатами являются true (истина) и fail (ложь, неудача). Согласование цели true всегда успешно. Согласование цели fail всегда неудачно. Для конъюнкции (операции "и") целей используется предикат "," (X,Y), а для дизъюнкции (операции "или") – предикат ";" (X;Y). Приоритет у оператора "," выше, чем у оператора ";", поэтому лишние скобки можно опускать. Например, выражение A,B;C,D интерпретируется как (A,B);(C,D). Для отрицания используется предикат \+ X.
Некоторые версии языка Пролог запрещают использование переменных в качестве элементов логического выражения, тогда для проверки целей, содержащихся в конкретизированной переменной X, используется предикат call(X).
Конструкция "если A то B иначе C" на языке Пролог может быть записана как (A,B;\+ A,C) (используя только логические операции) или (A->B;C) (используя вспомогательную операцию ->), а конструкция "если A то B" – как (A,B;\+ A) или, при некоторых ограничениях на действие B, (A,B;true) или (A->B). Можно ввести условный оператор в язык, задав необходимые операторы и предикаты.
:-op(1160,fx,если).
:-op(1150,xfx,то).
:-op(1155,xfx,иначе).
если A то B иначе C:-A,B;\+ A,C.
макс(X,Y,Z):-если X>Y то Z is X иначе Z is Y.
loading