6. Описание программы на micro-LISP

 Структурная схема программы на Лиспе изображена на рис.2. Об основных процедурах написано в разделе "Разработка процедур оболочки", в котором представлены схемы алгоритмов их работы.

Теперь перейдем непосредственно к описанию программы. Главная процедура start запускает процедуру mainmenu (она представлена в виде бесконечного цикла do, также представлены и все подменю: menufiles, menubd и т.д.). Mainmenu рисует главное меню и здесь же с помощью выражения cond и eq? организованно получение выбора и запуск выбранной процедуры.

 Процедура saving осуществляет запись БД в файл с помощью встроенного выражения with-output-to-file и функции write (все это организованно в виде lambda-выражения).

 Загрузка файла (процедура loading) происходит с помощью встроенных with-input-from-file и read (причем БД болезней представлена в виде списка *it_is*, а симптомов в виде списка *simptom*).

 Постановка диагноза осуществляется с помощью функции experting. Из БД выбирается болезнь ill, берется список ее симптомов spis_num и с помощью функции exp_ill (spis_num,ill) определяется, есть ли у пользователя эти симптомы. Если эта функция будет ложной (на запрос пользователь ответил отрицательно), то произойдет рекурсивный вызов функции experting от конца списка болезней (т.е. в дальнейшем будет выбрана следующая и т.д.).В процессе работы функции с помощью функции set! формируются списки положительных и отрицательных ответов пользователя *yes* и *no*. Если функция experting выполнила свою работу и диагноз поставлен успешно, то функция log_out (объяснение логического вывода) выводит на экран название определенной болезни и ее симптомы (функция использует для этого функцию cond и рекурсию).

 В режиме просмотра списка болезней и симптомов (view_ill) используется cond и рекурсивный вызов функции от хвоста списка, что позволяет вывести все содержимое БД на экран.

 В режиме добавления болезней (add_ill) и симптомов (add_sym) используется встроенная функция append (для соединения списков), а рекурсивный вызов функции addsyms обеспечивает возможность добавления к болезни нескольких симптомов. При редактировании болезней (red_ill) и симптомов (red_sym) старое значение удаляется с помощью функции delete! (удаление элемента из списка), а новое обавляется с помощью append.

 Удаление болезней (del_ill) осуществляется с помощью функции delete!. При удалении болезни автоматически удаляются и все ее симптомы (рекурсивно вызывая сама себя от конца удаляемого списка признаков функция delsyms последовательно удаляет все симптомы этой болезни).

 Удаление симптома (del_sym) также осуществляется с помощью delete!, но при этом с помощью функции append формируется новый список симптомов болезни, симптом которой удаляется. Затем происходит удаление болезни со старым списком симптомов {(set! *it_is* (delete! (list ill spis_nums) *it_is))} и добавление к списку *it_is* этой же болезни с новым списком.

7. Краткое описание встроенных предикатов и функций microLISP, используемых в программе

Окна

 Окна являются объектами, подобными "портам", которые представляют собой прямоугольные области на экране. Предикат WINDOW? определяет, действительно ли заданный объект является портом, представляющим окно на экране. Все интерактивные окна ввода-вывода представляются посредством окон, включая ввод-вывод, обеспечиваемый портами STANDARD-INPUT и STANDARD-OUTPUT. Новые окна-порты создаются и открываются с помощью MAKE-WINDOW; их атрибуты доступны с помощью WINDOW-GET-ATTRIBUTE и модифицируются WINDOW-SET-ATTRIBUTE!

 Окна до тех пор не выводятся на экран, пока область для них не очистится с помощью WINDOW-CLEAR. WINDOW-DELETE очищает область экрана, занятого окном. WINDOW-POPUP и WINDOW-POPUP-DELETE выдают несколько перекрывающихся окон.

 Позиция окна на экране и размер его строк и столбцов устанавливаются WINDOW-GET-POSITION и WINDOW-GET-SIZE, соответственно; модификация выполняется WINDOW-SET-POSITION! и WINDOW-SET-SIZE!.

 Модификация позиции и размеров окна может быть выполнена перед тем, как окно изначально выводится на экран по WINDOW-CLEAR. Позиция курсора устанавливается с помощью WINDOW-GET-CURSOR и изменяется WINDOW-SET-CURSOR!. Курсор появляется на экране только тогда, когда ввод производится с клавиатуры.

FLUSH-INPUT

 Процедура FLUSH-INPUT чистит буфер вводного порта.

 Формат (FLUSH-INPUT {port})

 Параметр port- вводной порт (необязательный аргумент).

Объяснение:

 FLUSH-INPUT отбрасывает любые литеры и включает следующую "последовательность конца строки" (end-of-line) в буфер ввода, который связан с port, если он задан, или с текущим вводным портом. Выдается неопределенное значение.

 

LAST-PAIR

 

Возвращает последнюю пару непустого списка.

LIST

Композиции пар, связанных через их cdr-компоненты, называются списками. Пустой список, обозначаемый как (), также является списком. Когда цепочка cdr-связей в паре оканчивается пустым списком, тогда пара называется "собственным списком". Процедура LIST обеспечивает такой список, состоящий из значений его аргументов. LIST* обеспечивает похожий список, но имеющий значение его последнего аргумента в cdr-компоненте последней пары цепочки.

MEMBER

MEMBER, MEMQ, MEMV

Процедура

Данные процедуры выдают подсписок, начинающийся с некоторого специфического объекта в собственном списке.

 Формат (MEMBER оbj list)

 (MEMQ оbj list)

 (MEMV оbj list)

 Параметры obj - любой объект в "ЛИСП-МИКРО";

 list - собственный список

Объяснение:

 Данные процедуры ищут первое появление obj в list, используя EQVAL? для сравнения (в случае MEMBER); при MEMQ используется EQ?; при MEMV - EQV? Если obj найден, подсписок, содержащий obj как первый элемент, выдается как результат. Если obj не найден в list, выдается "ложь".

DO

Специальное выражение

DO обеспечивает наиболее общую возможность вычисления итераций.

 Формат

 (DO ((var (init {step}})...)(test exp ...) stmt ...)

 Параметры var - любой идентификатор "ЛИСП-МИКРО";

 init - любые выражения в "ЛИСП-МИКРО".

 Вычисляется каждое init; результат используется как значение соответствующего var.

 Этот аргумент необязательный;

 step... - любые выражения "ЛИСП-МИКРО".

 Вычисляется каждое init; результат используется как значение соответствующего var для следующей итерации. Этот необязательный аргумент может быть описан, только если описан init;

 test - любое выражение "ЛИСП-МИКРО". Это выражение является условием, по которому итерация останавливается;

 exp... - любые выражения "ЛИСП-МИКРО". Эти выражения вычисляются перед выходом из цикла;

 stmt... - любые выражения "ЛИСП-МИКРО". Эти выражения вычисляются по порядку каждый раз как test возвращает "ложь".


Информация о работе «Разработка оболочки экспертной системы»
Раздел: Информатика, программирование
Количество знаков с пробелами: 35667
Количество таблиц: 1
Количество изображений: 0

Похожие работы

Скачать
41873
6
6

... И ТЕСТИРОВАНИЕ ПРОГРАММНОГО СРЕДСТВА 19 РУКОВОДСТВО ПО ЭУСПЛУАТАЦИИ ПРОГРАММНОГО СРЕДСТВА 20 8.1. РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА 20 ЗАКЛЮЧЕНИЕ 22 ЛИТЕРАТУРА 23 ВВЕДЕНИЕ Тема проекта – «Разработка подсистемы вывода в диагностической экспертной системе». Данная дипломная работа была выполнена на кафедре систем информатики в лаборатории искусственного интеллекта, Института Систем Информатики ...

Скачать
38919
0
2

... правила и укажет соответствие между ответами пользователя, правилами и ответом экспертной системы. 8. Правила типа "если-то" для представления знаний. В качестве кандидата на использование в экспертной системе можно рассматривать, в принципе, любой непротиворечивый формализм, в рамках которого можно описывать знания о некоторой проблемной области. Однако самым популярным формальным языком ...

Скачать
78776
2
5

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

Скачать
53767
2
3

... и реализации прототипа и выработка рекомендаций по доводке системы до промышленного варианта. Средняя продолжительность 1 - 2 недели. Глава 3. Анализ теории экспертных систем и выводы  3.1.Выбор подходящей проблемы для разработки экспертной системы. Этот этап включает деятельность, предшествующую решению начать разрабатывать конкретную ЭС. Он включает: - определение проблемной области и ...

0 комментариев


Наверх