МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • ЛИСП

    Такие формализмы называют продукционными. Эти правила похожи на условные

    операторы IF-THEN языков программирования, однако совершенно по другому

    интерпретируются.

    (ЕСЛИ на лампочку подано напряжение

    и лампочка не горит

    то лампочка перегорела)

    Через правила можно определить, как программа должна реагировать на

    изменение данных. При этом не нужно заранее знать блок-схему управления

    обработкой данных. В обычной программе схема передачи управления и

    использования данных предопределения самой программой. Ветвление в таких

    программах возможно только в заранее выбранных точках. Для задач, ход

    решения которых управляется самими данными, где ветвление скорее норма, чем

    исключение, этот способ малоэффективен.

    Фреймы.

    Это частный случай семантических сетей. Это метод представления

    знаний, который связывает свойства с узлами , представляющими понятия и

    объекты. Свойства описываются атрибутами (называемыми слотами) и их

    значениями.

    [f( , , ...)]

    где f - имя фрейма; - слот; v - имя слота; g - его

    значение.

    Использование фреймов с их атрибутами и взаимосвязями позволяет

    хранить знания о предметной области в структурированном виде,

    представлять в БЗ абстракции и аналогии. Система знаний представляется в

    виде сети под фреймом или субфреймом. Каждый из фреймов отражает

    определенные свойства, понятия, т. е. позволяет удовлетворять требованию

    структурированности и связности.

    С операциями присваивания значений фреймам и другими операциями можно

    сочетать сложные побочные действия и взаимовлияния.

    Одной из важнейших концепций формализма фреймов является

    наследование. Можно дать указание, что если значение слота в одном из

    фреймов не задается, то фрейм должен унаследовать умалчивамое значение

    этого слота из фрейма более высокого уровня. Наследование фреймами значений

    слотов будет осуществляться в том случае, если в фрейме будет

    присутствовать слот РАЗНОВИДНОСТЬ, в котором содержится имя другого фрейма.

    Используются и другие связанные с конкретным применением способы

    представления, но они менее распространены и, как правило, не годятся для

    использования в общем случае.

    Не всегда можно однозначно сказать, какой формализм представления

    использован в системе. В рамках одной и той же системы для представления

    различных видов знаний могут быть использованы различные формализмы.

    Пример1.

    В качестве примера представления знаний в виде продукций рассмотрим

    программу хранящуюся в файле EXSIS.LSP.

    ;EXSIS.LSP - пример представления знаний в виде продукций

    ;определим предложения являющиеся правилами в виде структур, состоящих из

    имени правила, условий и выводов, представленных в виде списка фактов

    (defstruct prav имя условия выводы) ;определение структурного типа

    PRAV

    ;создание структур типа PRAV и присваивание их переменным PRAV1 ...

    PRAV5

    (setq prav1 (make-prav :имя 'prav1 ;присвоение полю имя значения

    :условия '((жив имеет шерсть))

    :выводы '((жив млекопитающее))))

    (setq prav2 (make-prav :имя 'prav2

    :условия '((жив кормит детенышей молоком))

    :выводы '((жив млекопитающее))))

    (setq prav3 (make-prav :имя 'prav3

    :условия '((жив имеет перья))

    :выводы '((жив птица))))

    (setq prav4 (make-prav :имя 'prav4

    :условия '((жив умеет летать)

    (жив несет яйца))

    :выводы '((жив птица))))

    (setq prav5 (make-prav :имя 'prav5

    :условия '((жив ест мясо))

    :выводы '((жив хищник))))

    (setq *правила* '(prav1 prav2 prav3 prav4 prav5) ;список, хранящий

    правила системы

    (defun проверь-правило (правило)

    ;проверяет применимо ли правило

    (подмнож (prav-условия правило) *факты*))

    (defun подмнож (подмнож множ)

    ;проверяет, является ли множ подмнож

    (equal подмнож (intersection1 подмнож множ)))

    (defun добавь-выводы (правило)

    ;расширяет список фактов правилами вывода

    (do ((выводы (prav-выводы правило))) ;инициализация начального

    значения

    ((null выводы) *факты*) ;условие окончания

    (if (member (car выводы) *факты*) nil ;проверка - входит

    «голова»

    (progn (prin1 "Согласно правилу:") ;выводов в список

    фактов

    (prin1 (prav-name правило))

    (push (car выводы) *факты*)))

    (setq выводы (cdr выводы)))) ;шаг изменения

    Для проверки работоспособности программы необходимо выполнить

    следующую последовательность команд:

    MuLisp-87.com Common.lsp - Загрузка системы

    (load structur.lsp) - подключение приложения для работы со

    структурами

    (load rash.lsp) - подключение расширения, которое мы рассмотрим позже

    (load exsis.lsp) - подключение тестируемой программы

    В начале работы с программой необходимо инициализировать список

    фактов

    (SETQ *факты* ‘(начальные факты))

    где начальные факты - условия из какого-либо правила

    Пример2.

    Пример представления знаний с помощью фреймов. В примере упоминаются

    три фрейма - МЕРОПРИЯТИЕ, СОБРАНИЕ и СОБРАНИЕ1. Фрейм МЕРОПРИЯТИЕ -

    наиболее общий, фрейм СОБРАНИЕ - более конкретный, описывающий вид

    МЕРОПРИЯТИЯ, а фрейм СОБРАНИЕ1 - наиболее уточненный фрейм, описывающий

    конкретное СОБРАНИЕ. Фрейм СОБРАНИЕ называется субфреймом фрейма

    МЕРОПРИЯТИЕ, а СОБРАНИЕ1 - субфрейм фрейма СОБРАНИЕ.

    (собрание имя фрейма

    (разновидность (мероприятие)) имена и значения слотов

    (время (среда 14.00)) (умалчиваемые

    значения

    (место (зал заседаний)) наследуются

    субфреймами)

    )

    (собрание1

    (разновидность (собрание))

    (присутствуют ((Вася) (Петя) (Маша)))

    )

    Реализация фрейм-программы на Лиспе.

    ;EXSIS2 - реализация фрейм-программы на Лиспе.

    (setf (get ‘собрание ‘разновидность) ‘мероприятие)

    (setf (get ‘собрание ‘время) ‘(среда 14.00))

    (setf (get ‘собрание ‘место) ‘(зал заседаний))

    (setf (get ‘собрание1 ‘разновидность) ‘собрание)

    (setf (get ‘собрание1 ‘присутствуют) ‘((Вася) (Петя) (Маша)))

    ;функция - определяющая наследуемые свойства

    (defun наследование (фрейм имя_слота)

    (cond ((get фрейм имя_слота)) ;имеется во фрейме данный слот?

    ;если да, то вернуть его значение.

    (t (cond ((get фрейм ‘разновидность) ;иначе -

    проверить наличие

    ;слота разновидность. В случае его присутствия - рекурсивно применить

    ;функцию к верхним фреймам

    (наследование (get фрейм ‘разновидность)

    имя_слота))

    (t nil)))))

    4. Задания к лабораторной работе.

    1.Переведите следующие списочные записи в точечные:

    (w (x));

    ((w) x);

    (nil nil nil);

    (v (w) x (y z));

    ((v w) (x y) z);

    (((v) w x) y z).

    2. Переведите следующие точечные записи в списочные:

    (a . (b . (c . nil)));

    ((a . nil) . nil);

    (nil . (a . nil));

    (a . ((b . (c . nil)) . ((d . (e . nil)) . nil)));

    (a . (b . ((c . (d . ((e . nil) . (nil))) . nil)));

    ((a . (b . nil)) . (c . ((d . nil) . (e . nil)))).

    3. Напишите функцию:

    от трех аргументов, аналог встроенной функции pairlis, которая строит

    список пар;

    от двух аргументов, аналог встроенной функции assoc, которая ищет пару,

    соответствующую ключу.

    4. Напишите функцию, аналог функции putassoc которая физически

    изменяет а-список (putassoc1 ключ данные а-список).

    5. Расширьте возможности программы EXSIS.LSP:

    напишите функцию, пополняющую базу знаний новыми знаниями;

    напишите функцию, удаляющую ненужные знания;

    расширьте базу знаний;

    напишите главную программу, к которой должны быть подключены все ранее

    написанные функции (и имеющиеся в EXSIS.LSP), и которая выполняла бы их в

    диалоговом режиме.

    6. Подобным образом измените программу EXSIS1.LSP.

    7. Разработайте базу знаний и правила базы знаний РАСПИСАНИЕ ЗАНЯТИЙ

    используя:

    формализм фреймов;

    формализм продукций.

    5. Вопросы.

    1. В чем особенности точечной нотации?

    2. Назовите структурированные типы данных, их особенности?

    3. Способы представления знаний?

    4. Их достоинства и недостатки?

    Лабораторная работа № 6.

    Тема: Изучение учебной версии языка Лисп - dlisp. Расширение

    библиотеки функций dlisp.

    Цель: Ознакомиться с учебной версией Лиспа - dlisp. Изучить ее

    возможности и особенности. Расширить библиотеку функций dlisp.

    Интерфейс пользователя.

    Функции, поддерживаемые dlisp.

    Расширение библиотеки функций dlisp.

    Задание к лабораторной работе.

    Вопросы.

    1. Интерфейс пользователя.

    Запуск системы осуществляется командой:

    DLISP.EXE

    При загрузке системы начинает работать редактор, он чистит экран,

    рисует рамку и выдает на экран главное меню:

    Файл. Имеет следующие опции: новый, открыть, сохранить, сохранить

    как, выход.

    Просмотр: экран вывода, экран интерпретатора.

    Редактор.

    Поиск: поиск, повторить поиск, замена.

    Запуск: выполнить, перезапустить, продолжить.

    Отладка: шаг, трассировка, контрольная точка, очистить все.

    Параметры: режим экрана, проверка синтаксиса.

    Справка.

    Затем система ждет, пока пользователь не выберет одну из опций.

    Редактор работает с файлами, имеющими расширение LSP и находящимися в

    той же директории, что и файл DLISP.EXE

    Результаты вычислений выводятся на специальный экран. Для просмотра

    этих результатов необходимо выбрать опцию «Просмотр» главного меню, а в ней

    - «экран вывода». Чтобы вернуться назад необходимо нажать любую клавишу.

    Для переключения в режим диалога используют клавиши SHIFT+TAB.

    Для повтора предыдущей команды используют клавишу F3.

    2. Функции, поддерживаемые dlisp.

    Dlisp поддерживает несколько различных типов данных:

    * списки

    * символы

    * строковые константы

    * действительные числа

    * целые числа

    По синтаксису и соглашениям Dlisp близок к MuLispу, более того, он

    является небольшой его частью.

    Dlisp содержит некоторое число заранее определенных функций. Каждая

    функция вызывается как список, первым элементом которого является имя

    функции, а остальными - аргументы этой функции (если они есть). Многие из

    функций - стандартные функции LISP, их можно найти в каждом руководстве по

    языку.

    Функции MuLispа поддерживаемые dlispом и определенные нами в

    предыдущих лабораторных работах.

    (+ ...)

    (- ...)

    (* ...)

    (/ ...)

    (= ...)

    (/= )

    (< ...)

    ( ...)

    (> ...)

    (>= ...)

    (and ...)

    (atom )

    (boundp )

    (car )

    (cdr )

    (cond ( ...)...)

    (cons )

    (defun ...)

    (eq )

    (if [])

    (lambda ...)

    (list ...)

    (listp )

    (mapcar ...)

    (not )

    (null )

    (numberp )

    (or ...)

    (princ [])

    (print [])

    (progn ...)

    (quote )

    (read )

    (set )

    (setq [ ]...)

    (while ...)

    (zerop )

    Функции dlispа не используемые MuLispом.

    (cos )

    Эта функция возвращает косинус , где - выражается в

    радианах. Например:

    (cos 0.0) возвращает 1.000000

    (cos pi) возвращает -1.000000

    (sin )

    Эта функция возвращает синус как действительное число, где

    выражен в радианах. Например:

    (sin 1.0) возвращает 0.841471

    (sin 0.0) возвращает 0.000000

    (min ...)

    Эта функция возвращает наименьшее из заданных .

    Каждое может быть действительным или целым.

    (nth )

    Эта функция возвращает "энный" элемент , где - номер

    элемента (ноль - первый элемент). Если больше, чем номер последнего

    элемента , возвращается nil. Например:

    (nth 3 '(a b c d e)) возвращает D

    (nth 0 '(a b c d e)) возвращает A

    (nth 5 '(a b c d e)) возвращает nil

    (strcat ...)

    Эта функция возвращает строку, которая является результатом

    сцепления строки1>, и т.д. Например:

    (strcat "a" "bout") возвращает "about"

    (strcat "a" "b" "c") возвращает "abc"

    (strcat "a" "" "c") возвращает "ac"

    (strlen )

    Эта функция возвращает длину в символах строковой константы

    как целую величину. Например:

    (stalen "abcd") возвращает 4

    (stalen "ab") возвращает 2

    (stalen "") возвращает 0

    (subst )

    Эта функция просматривает в поиске и

    возвращает копию с заменой каждого встречного

    на . Если не найден в , SUBST

    возвращает неизменным. Например, дано:

    (setq sample '(a b (c d) b))

    тогда:

    (subst 'qq 'b sample) возвращает (A QQ (C D) QQ)

    (subst 'qq 'z sample) возвращает (A B (C D) B)

    (subst 'qq '(c d) sample) возвращает (A B QQ B)

    (subst '(qq 'rr) '(c d) sample) возвращает (A B (QQ RR) B)

    (subst '(qq 'rr) 'z sample) возвращает (A B (C D) B)

    В сочетании с функцией ASSOC, SUBST обеспечивает удобный способ

    замены величины, найденной по ключу в структурированном списке. Например,

    дано:

    (stq who '((ferst john) (mid q) (last public)))

    тогда:

    (setq old (assoc 'first who)) возвращает (FIRST JOHN)

    (setq new '(first j)) возвращает (FIRST J)

    (setq new old who) возвращает ((FIRST J) (MID Q) (LAST PUBLIC))

    (type )

    Эта функция возвращает TYPE (тип) , где TYPE - одно из

    следующих значений (как атом):

    REAL числа с плавающей запятой

    STR строковые константы

    INT целые величины

    SYM символы

    LIST списки (и функции пользователя)

    3. Расширение библиотеки функций dlisp.

    Основные принципы программирования на dlisp те же, что и в MuLisp,

    при этом сохраняется и синтаксис MuLispа.

    Никогда не используйте имена встроенных функций или символов для

    функций, определяемых вами, так как это сделает недоступными встроенные

    функции.

    Пример расширения библиотеки функций dlispа содержится в файле

    rash.lsp. Для его запуска необходимо выполнить следующую последовательность

    команд:

    MuLisp87.com Common.lsp

    (load rash.lsp)

    ;File rash.lsp

    ;(Приложение к учебной версии языка Лисп dlisp).

    ;Содержит функции, расширяющие библиотеку dlisp Лиспа.

    ;Функция APPEND1 соединяет два списка в один

    (defun append1 (l p)

    (if (null l) p ;L пуст - вернуть P (условие окончания),

    (cons (car l) ;иначе - создать список,

    (append1 (cdr l) p)))) ;используя рекурсию.

    ;EQUAL1 - логическая идентичность объектов (параллельная рекурсия)

    (defun equal1 (u v)

    (cond ((null u) (null v)) ;возвращает T если U и V пустые

    ((numberp u) (if (numberp v) (= u v) ; проверка

    nil)) ;на идентичность

    ((numberp v) nil) ; чисел

    ((atom u) (if (atom v) (eq u v) ;сравнение атомов

    nil))

    ((atom v) nil)

    (t (and (equal1 (car u) (car v)) ; идентичность "голов"

    (equal1 (cdr u) (cdr v)))))) ;идентичность "хвостов"

    ;DELETE1 - удаляет элемент X из списка L

    (defun delete1 (x l)

    (cond ((null l) nil)

    ((equal1 (car l) x) (delete1 x (cdr l)))

    (t (cons (car l) (delete1 x (cdr l)))))) ;ветвь выполняется

    ;в случае невыполнения предыдущих.

    ;FULLENGTH1 - определяет полную длину списка L (на всех уровнях)

    (defun fullength1 (l)

    (cond ((null l) 0) ;для пустого списка возвращается 0

    ((atom l) 1) ;если L является атомом - возвращается 1

    (t (+ (fullength1 (car l)) ;подсчет в глубину

    (fullength1 (cdr l)))))) ;подсчет в ширину

    ;DELETELIST1 - удаляет все элементы, входящие в список U из списка V

    (defun deletelist1 (u v)

    (cond ((null u) v)

    (t (delete1 (car u)

    (deletelist1 (cdr u) v)))))

    ;MEMBER1 - проверяет вхождение элемента U в список V на верхнем уровне

    (defun member1 (u v)

    (cond ((null v) nil)

    ((equal1 u (car v)) v)

    (t (member1 u (cdr v)))))

    ;В случае присутствия S-выражения U в списке V функция возвращает остаток

    списка V, начинающийся с U, в противном случае результатом вычисления

    является NIL.

    ;INTERSECTION1 - вычисляет список общих элементов двух списков

    (defun intersection1 (u v)

    (cond ((null u) nil)

    ((member1 (car u) v);проверка на вхождение "головы" сп. U в сп.

    V

    (cons (car u) (intersection1 (cdr u) v)));создание списка

    (t (intersection1 (cdr u) v))));ненужные элементы отбрасываются

    ;UNION1 - объединяет два списка, но в отличие от APPEND1,

    ;в результирующий список не добавляются повторяющиеся элементы

    (defun union1 (u v)

    (cond ((null u) v)

    ((member1 (car u) v) ;отсеивание

    (union1 (cdr u) v)) ; ненужных элементов

    (t (cons (car u)

    (union1 (cdr u) v)))))

    ;COPY-LIST1 - копирует верхний уровень списка

    (defun copy-list1 (l)

    (cond ((null l) nil)

    (t (cons (car l)

    (copy-list1 (cdr l))))))

    ;COPY_TREE1 - копирует списочную структуру

    (defun copy-tree1 (l)

    (cond ((null l) nil)

    ((atom l) l)

    (t (cons (copy-tree1 (car l))

    (copy-tree1 (cdr l))))))

    ;ADJOIN1 - добавляет элемент к списку

    (defun adjoin1 (x l)

    (cond ((null l) nil)

    ((atom l) (cons x ;если L атом, то он преобразуется в список,

    (cons l nil))) ;а затем к нему добавляется X

    (t (cons x l))))

    ;SET-DIFFERENCE1 - находит разность двух списков

    (defun set-difference1 (w e)

    (cond ((null w) nil)

    ((member1 (car w) e) ;отбрасываются ненужные

    (set-difference1 (cdr w) e)) ;элементы

    (t (cons (car w)

    (set-difference1 (cdr w) e)))))

    ;COMPARE1 - сравнение с образцом

    (defun compare1 (p d)

    (cond ((and (null p) (null d)) t) ;исчерпались списки?

    ((or (null p) (null d)) nil) ;одинакова длина списков?

    ((or (equal1 (car p) '&) ;присутствует в образце атом &

    (equal1 (car p) (car d))) ;или головы списков равны

    (compare1 (cdr p) (cdr d))) ;& сопоставим с любым атомом

    ((equal1 (car p) '*) ;присутствует в образце атом *

    (cond ((compare1 (cdr p) d)) ;* ни с чем не сопоставима

    ((compare1 (cdr p) (cdr d))) ;* сопоставима с одним атомом

    ((compare1 p (cdr d))))))) ;* сопоставима с несколькими

    ;атомами

    ;SUBSTITUTE1 - замена в списке L атома S на атом N

    (defun substitute1 (n s l)

    (cond ((null l) nil)

    ((atom (car l))

    (cond ((equal1 s (car l))

    (cons n (substitute1 n s (cdr l))))

    (t (cons (car l) (substitute1 n s (cdr l))))))

    (t (cons (substitute1 n s (car l))

    (substitute1 n s (cdr l))))))

    ;DELETE-DUPLICATES1 - удаление повторяющихся элементов

    (defun delete-duplicates1 (l)

    (cond ((null l) nil)

    ((member1 (car l) (cdr l))

    (delete-duplicates1 (cdr l)))

    (t (cons (car l) (delete-duplicates1 (cdr l))))))

    ;ATOMLIST1 - проверка на одноуровневый список

    (defun atomlist1 (l)

    (cond ((null l) t)

    ((listp (car l)) nil)

    (t (atomlist1 (cdr l)))))

    ;REVERSE1 - обращает верхний уровень списка

    (DEFUN REVERSE1 (l)

    (COND ((NULL l ) NIL)

    (T (APPEND1 (REVERSE1 (CDR l))

    (CONS (CAR l) NIL)))))

    4. Задание к лабораторной работе.

    Напишите функцию, аналог системной функции Лиспа:

    1. а) (1+ ) Результат функции - , увеличенное на

    единицу.

    в) (1- ) Результат функции - , уменьшенное на

    единицу.

    2. а) (incf память приращение) Добавление приращения к числу в

    памяти.

    в) (decf память приращение) Вычитание приращения из числа в

    памяти.

    3. (expt ) Эта функция возвращает ,

    возведенное в указанную . Если оба аргумента целые, то

    результат - целое число. В любом другом случае, результат - действительное

    число.

    4. (gcd ) Функция возвращает наибольший общий

    делитель и . и должны быть целыми.

    5. а) (first ), second, third, и т. д. возвращающие

    соответственно первый, второй, третий, и т. д. элемент списка.

    в) (last ) Эта функция возвращает последний элемент

    списка. не должен быть равен nil. LAST возвращает либо атом либо

    список.

    6. а) (max ...) Эта функция возвращает наибольшее из

    заданных чисел.

    в) (min ...) Эта функция возвращает наименьшее из

    заданных чисел.

    7. а) (evenp ) Проверяет, четное ли число. Она возвращает T -

    если число четное и NIL - в противном случае.

    в) (oddrp ) Эта функция - противоположная по действию

    функции evenp.

    8. которая сортирует числа:

    а) по возрастанию.

    в) по убыванию.

    9. предикат - который определяет:

    а) числа с плавающей запятой.

    в) целые числа.

    г) строковые константы.

    д) символы.

    е) списки.

    10. зависящую от одного аргумента, которая генерирует все циклические

    перестановки списка.

    11. зависящую от одного элемента, которая по данному списку вычисляет

    список его элементов:

    а) встречающихся в нем более 1, 2, ... раз.

    в) встречающихся в нем не менее 2, 3, ... раз.

    S. Запишите все функции, написанные вами, в один файл. Для отладки

    программы используйте встроенные средства dlispа.

    5. Вопросы.

    1. Какие способы тестирования программ предусмотрены в dlisp?

    2. В чем их различия?

    3. Какие функции предусмотрены для работы со строковыми константами в

    dlisp?

    4. Назовите их основные особенности?

    Страницы: 1, 2, 3, 4


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.