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

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

Логическое программирование состоит из утверждения ряда фактов и правил вывода. Выполнение программы состоит в доказательстве теоремы. Программа отвечает, можно ли доказать теорему на основании сделанных заранее утверждений.

Логическое программирование отличается от процедурного программирования (C, JAVA и т. д.), расчеты выполняются в виде логических доказательств. Мы говорим о декларативном программировании: программа описывает ситуацию, соответствующую решаемой задаче. Декларативное программирование вполне совместимо со структурированием объектов.

Формулы, выраженные на Прологе, ограничены предложениями Хорна и логикой первого порядка. Предложение Хорна — это предложение не более чем с одним положительным литералом. Они не будут объяснены, но подразумеваются в объяснениях языка Пролог.

Правила, факты и цели

Если в предложении Хорна есть положительный литерал и хотя бы один отрицательный литерал, они правила :
qqили x,y,z, ¬ребенок(x,y) ∨ ¬ребенок(y,z) ∨внук(x,z) что равно
ребенок (x, y) ∧ ребенок (y, z) ⇒ grand_child (x, z)

на Прологе написано: grand_child_of(X,Z):- child_of(X,Y), child_of(Y,Z)

Мы можем писать предложения Хорна без отрицательного литерала (положительные предложения Хорна), но только с положительным литералом. Это факты : child_of('Бернард', 'Бернадетт').

Мы можем писать предложения Хорна без положительных литералов (отрицательные предложения Хорна), но только с отрицательными литералами. Это цели : ?-внук_из(B,'уместный'),племянник(X,Y).

Таким образом, программа представляет собой набор фактов и правил, оформленных в виде предложений Хорна. Интерпретатор Пролога использует эту базу знаний для достижения целей.

Синтаксис Пролога

Синтаксис состоит из:

  • Константы : целые или плавающие числа, логические значения, идентификаторы и строки символов.
  • Переменные : идентифицируется строками символов, начинающимися с заглавной буквы или символа подчеркивания (если они неопределенные, т. е. не представляют интереса для пользователя). Переменная в математическом смысле, она всегда представляет один и тот же объект и не меняет своего значения в одной и той же демо-ветке.
  • Предикат : идентифицируется строками символов, начинающимися со строчной буквы. Предикат имеет арность (количество требуемых аргументов). Параметры разделяются запятой, эквивалентной И; ИЛИ - точка с запятой.

Правила и факты:

  • факт — это предикат с константами в качестве параметров: родитель('Бернард', 'Бернард')
  • правило состоит из головы (положительного литерала) и хвоста (союза отрицательных литералов, оканчивающихся точкой: племянник(X,Y):- сын(X,Z), брат_или_сестра(Y,Z).

Написать программу на Прологе

Программа — это список фактов и правил. Правила, имеющие один и тот же головной предикат, и факты, относящиеся к одному и тому же предикату, группируются вместе. Порядок, в котором объявляются правила, может повлиять на цели.

child_of('Роджер','Гертруда'). child_of('Гертруда','Жермен'). child_of('Марсель','Роберт'). брат_или_сестра('Гертруда','Роберт'). племянник(X,Y):- сын(X,Z), брат_или_сестра(Y,Z). grand_child_of(X,Y):- child_of(X,Z),child_of(Z,Y).

Константа ('roger') влияет на всю программу, в то время как переменная существует только в предложении, где она находится. Таким образом, переменная X племянника (X, Y) не совпадает с переменной grand_child_of (X, Y). С другой стороны, оно такое же, как и в связанном с ним союзе.

После того, как программы загружены и, следовательно, создана база фактов и правил, можно задавать вопросы. Это называется демонстрацией или решением вопроса. Возникает вопрос при замене в правиле или создании константы или переменной знаком '?'. Чтобы узнать все правила типа, напишите имя правила, содержащего переменные, за которым следует '?' : человек(Н)? используется, чтобы знать всех людей базы.

алгоритм логического программирования парадигма пролог

Делиться
ru_RURU
%d такие блоггеры, как: