ВУЗ:
Составители:
Рубрика:
9. Логическое программирование.
Язык Пролог
Логическое программирование идет дальше функционального. Здесь программист не только
не занимается управлением памятью, но и не управляет вычислениями. (Для логической
программы, например, нельзя нарисовать блок-схему).
Логическое программирование не является программированием в традиционном понимании
этого слова, поскольку программист в данном случае пишет не программу-алгоритм, а
логическую модель. Как правило, такая модель может быть использована для решения не
одной, а ряда задач, определенного моделью круга.
Архитектура машины Фон-Неймана еще меньше приспособлена к специфике и
потребностям логического программирования, чем функционального. То есть
«эффективность вычислений» еще ниже.
Математическим фундаментом логического программирования служат аксиоматические
теории. Например, как в случае Пролога – метод резолюции.
Язык Пролог (ПРОграммироване с помощью ЛОГики) создан А. Колмеройер 1970 году во
Франции, распространен в Венгрии, Англии, Японии.
Программа на Прологе представляет из себя систему аксиом, представленных в виде не
содержащих свободных переменных дизъюнктов. В Прологе используются только
хорновские дизъюнкты, то есть дизъюнкты, в которых не больше одного положительного
предиката. В Прологе их называют обычно предложениями или клозами.
То есть исходные аксиомы могут иметь в общем случае вид A
1
& A
2
& ... & A
n
B
что при переводе в дизъюнкты будет A
1
A
2
... A
n
B
Дизъюнкт, состоящий только из отрицательных предикатов - вопрос. А дизъюнкт,
состоящий лишь из одного положительного предиката – факт.
Примеры программы на Прологе.
1. append ([ ], L, L).
2. append ([ x | L1], L2, [x | L3]) :- append (L1, L2, L3).
Здесь [ ] выделяют список.
| - отделяет голову (первый элемент списка) от хвоста списка.
Добавим к предложениям, описывающим функцию append, вопрос: “Какой получится
список при объединении списков [a, b] и [c, d]?
3. ?-append ([a, b], [c, d], z).
Выполнение программы:
2 – 3: 4: append ([a | b], [c, d], [a | z1]) :- append ( [b], [c, d], z1).
2 – 4: 5: append ([b | [ ]], [c, d], [b | z2]) :- append ( [ ], [c, d], z2).
5 – 1: 6: append ([ ], [c, d], [c, d]).
В результате получим искомое z.
z2 = [c, d]; z1 = [b | z2] = [b, c, d]
z = [a, z1] = [a, b, c, d].
Даже на такой скромной модели можно решаить не одну, а ряд задач, Например, вопрос 3`:
“ Какой список надо добавить к [a, b])., чтобы получился список
[a, b, c, d]).?“
3`. ?-append ([a, b], z, [a, b, c, d]).
Обращение списка:
обращение ([], []).
— 99 —
9. Логическое программирование. Язык Пролог Логическое программирование идет дальше функционального. Здесь программист не только не занимается управлением памятью, но и не управляет вычислениями. (Для логической программы, например, нельзя нарисовать блок-схему). Логическое программирование не является программированием в традиционном понимании этого слова, поскольку программист в данном случае пишет не программу-алгоритм, а логическую модель. Как правило, такая модель может быть использована для решения не одной, а ряда задач, определенного моделью круга. Архитектура машины Фон-Неймана еще меньше приспособлена к специфике и потребностям логического программирования, чем функционального. То есть «эффективность вычислений» еще ниже. Математическим фундаментом логического программирования служат аксиоматические теории. Например, как в случае Пролога – метод резолюции. Язык Пролог (ПРОграммироване с помощью ЛОГики) создан А. Колмеройер 1970 году во Франции, распространен в Венгрии, Англии, Японии. Программа на Прологе представляет из себя систему аксиом, представленных в виде не содержащих свободных переменных дизъюнктов. В Прологе используются только хорновские дизъюнкты, то есть дизъюнкты, в которых не больше одного положительного предиката. В Прологе их называют обычно предложениями или клозами. То есть исходные аксиомы могут иметь в общем случае вид A1 & A2 & ... & An B что при переводе в дизъюнкты будет A1 A2 ... An B Дизъюнкт, состоящий только из отрицательных предикатов - вопрос. А дизъюнкт, состоящий лишь из одного положительного предиката – факт. Примеры программы на Прологе. 1. append ([ ], L, L). 2. append ([ x | L1], L2, [x | L3]) :- append (L1, L2, L3). Здесь [ ] выделяют список. | - отделяет голову (первый элемент списка) от хвоста списка. Добавим к предложениям, описывающим функцию append, вопрос: “Какой получится список при объединении списков [a, b] и [c, d]? 3. ?-append ([a, b], [c, d], z). Выполнение программы: 2 – 3: 4: append ([a | b], [c, d], [a | z1]) :- append ( [b], [c, d], z1). 2 – 4: 5: append ([b | [ ]], [c, d], [b | z2]) :- append ( [ ], [c, d], z2). 5 – 1: 6: append ([ ], [c, d], [c, d]). В результате получим искомое z. z2 = [c, d]; z1 = [b | z2] = [b, c, d] z = [a, z1] = [a, b, c, d]. Даже на такой скромной модели можно решаить не одну, а ряд задач, Например, вопрос 3`: “ Какой список надо добавить к [a, b])., чтобы получился список [a, b, c, d]).?“ 3`. ?-append ([a, b], z, [a, b, c, d]). Обращение списка: обращение ([], []). — 99 —
Страницы
- « первая
- ‹ предыдущая
- …
- 97
- 98
- 99
- 100
- 101
- …
- следующая ›
- последняя »