Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Spec_Mov_3k_4k_Lect.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.46 Mб
Скачать

Ограничения Турбо-Пролога

Турбо-Пролог является типизированной версией Пролога. За счет статического контроля типов существенно увеличивается скорость работы интерпретатора, однако это же приводит и к существенному недостатку – отсутствует возможность определения переменных, значениями которых были бы правила или факты. Отсюда следует невозможность введения метаправил, которые бы управляли ходом построения доказательств, основываясь на опыте решения предыдущих задач. В Турбо-Прологе отсутствует возможность введения новых операторов и назначения им приоритетов (это имеется в других реализациях Пролога) для конструирования сложных доменных структур. Кроме того, типизация Турбо-Пролога сужает область применения программы, хотя частично этот недостаток устраняется за счет возможности перекрытия предикатов и реализации т.о. полиморфизма именований.

«Циклы» с возвратами

Циклы или поиск с возвратами ориентированы на обработку данных, представленных в виде фактов в базе данных. В этом методе вместо накапливающих параметров для получения результата используются некоторые выделенные для этой цели данные, размещаемые в динамической базе данных. Можно говорить о том, что эти выделенные данные играют роль ячеек обычной памяти компъютера.

Пример

Пусть в динамической базе данных хранятся данные о сотрудниках некоторого отдела предприятия. Данные включают:

  • Ф.И.О.,

  • Должность,

  • Табельный номер,

  • Дополнительный информационный список.

В дополнительном информационном списке по порядку располагаются – число проработанных дней, заработок за один день и пр. атрибуты. Все данные представлены в символьном виде. Требуется вычислить средний заработок по отделу предприятия.

domains

fio, dg, tab = symbol

chdn, zrp, sum, cnt = real

str1 = odn(fio, dg, tab)

str2 = symbol*

database

fact(str1, str2)

sr_zar(sum, cnt)

predicates

srZar_otd2(real)

el2(chdn, zrp)

clauses

el2(O, P):- fact(_, [X,Y|_]), str_real(X, O), str_real(Y, P).

srZar_otd2(0):- consult(“a:\otd2.dat”), asserta(sr_zar(0, 0)), el2(Y, Z),

retract(sr_zar(S, C)), S1 = S + Y * Z, C1 = C + 1,

asserta(sr_zar(S1, C1)), fail.

srZar_otd2(X):- retract(sr_zar(S, C)), X = S/C.

goal

srZar_otd2(X), write(“Средняя зарплата по отделу = ”, X), nl.

В анализе работы программы следует учитывать тот факт, что встроенные системные предикаты не создают точку решения, которая могла бы использоваться, если выполняется возврат в процессе построения вывода. Вначале переменная X унифицируется нулем в процессе унификации подцели srZar_otd2(X). Когда все данные в БД вида fact(…) просмотрены, то переменная X унифицируется значением S/C. Предикат str_real (X, Y) обеспечивает преобразование символьного представления числа X в целочисленное Y.

Вопросы для самоконтроля

  • Как декларируются составные области?

  • Каким образом можно специфицировать предикаты динамической БД?

  • Какие системные предикаты предназначены для работы с динамической БД в Турбо-Прологе?

  • Что из себя представляют предикаты-селекторы?

  • Каковы ограничения Турбо-Пролога?

  • В чем суть метода, представляющего «циклы» с возвратами?

Вопросы на самостоятельную проработку

К оглавлению

Лекция 6. Основы Лиспа

Системы и языки программирования на основе Лиспа

Лисп (List Processing) был разработан Дж.МакКарти. В 1960 году он представил формальную спецификацию работы интерпретатора Лиспа. С тех пор было разработано множество версий языка Common Lisp, Franz Lisp, Interlisp, Maclisp и др. На основе Лиспа созданы системы программирования объектного типа – Flavors, Xlisp, CLOS (или Allegro), LOOPS и др. С применением Лиспа созданы языки и системы программирования для задач инженерии знаний.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]