Специальная математика. Соловьев А.Е. - 99 стр.

UptoLike

Составители: 

Рубрика: 

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 —