Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Язык Пролог



Логическое программирование идет дальше функционального. Здесь программист не только не занимается управлением памятью, но и не управляет вычислениями. (Для логической программы, например, нельзя нарисовать блок-схему).

Логическое программирование не является программированием в традиционном понимании этого слова, поскольку программист в данном случае пишет не программу-алгоритм, а логическую модель. Как правило, такая модель может быть использована для решения не одной, а ряда задач, определенного моделью круга.

Архитектура машины Фон-Неймана еще меньше приспособлена к специфике и потребностям логического программирования, чем функционального. То есть «эффективность вычислений» еще ниже.

Математическим фундаментом логического программирования служат аксиоматические теории. Например, как в случае Пролога – метод резолюции.

Язык Пролог (ПРОграммироване с помощью ЛОГики) создан А. Колмеройер 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]).

Обращение списка:

обращение ([], []).

обращение ([Y | T], L):- обращение (T, Z), append (Z, [H], L).

?- обращение ([a, b, c], X).

Важной особенностью логического программирования то, что синтез конкретного алгоритма происходит





Дата публикования: 2014-11-03; Прочитано: 350 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...