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

3.11.2 Свойства Атомов

Элементы с которыми работает Lisp: атом и список. Когда встречается атом, то Lisp берет его, как имя функции или интерпритирует его из таблицы, в которой содержится:

  • Имя атома,

  • Свойства атома,

  • Значение свойства.

Атом/свойства

Значение

применение

T

T

-

Nil

Nil

-

Витамин

В12

медецина

Иван

первый

-

Список может быть различным. Атом имеет несколько свойств, по которым он похож на объекты реального мира.

Присвоить атому свойство “значение”

(Set ‘L ‘(A B))

Теперь набрав $L, получим значение (A B) из таблицы атомов, или можем набирать:

$(Car L)

A

$(Cdr L)

B

$(Append LL)

(A B A B)

(Set ‘A ‘B)

(Set ‘B ‘C)

$A

B

$B

C

$(EVAL A)

C

В Lisp для присвоения атому свойства используют функцию:

(Put <атом> ())

(<имя свойства><значение свойства>)

Побочный эффект функции Put заключается в изменении списка свойств атома. Если свойства с указанным именем не было, то оно добавляется. Если это имя было, то значение свойства изменяется.

Пример:

Пусть имется атом Fnumber

(Put ‘Fnumber ‘(Integer 2))  (Integer 2)

можно присвоить еще свойство

(Put ‘Fnumber ‘(Even T))  (Even T Integer 2)

Если свойство было, то меняется его значение

(Put ‘Fnumber ‘(Integer 21)) (Even T Integer 21)

Есть функция, удаляющая свойства атома

(Remprop <атом> <свойство>)

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

(Get <атом> <свойство>) – возвращает значение свойства, если свойство есть, или nil, если свойства нет.

3.11.3 Функция сопоставления с образцом

Необходимо определить функцию match, которая сопоставляет образец и факт, руководствуясь приведеннными выше обобщенными правилами.

Тогда при обращении к функции match:

(match '(цвет яблоко красный) '(цвет * красный))-> T

или

(match '(& знания &)

'(мои знания по ОИИ очень хорошие ну очень хорошие

просто великолепные)) -> T

Теперь будем определять match, но вначале упрощенно,затем все более усложняя. Вначале - используя правила 1 и 3, т.е. не вводя специальные символы.

(DEFUN MATCH (P D)

(COND ((AND (NULL P) (NULL D)) T)

((EQUAL (CAR P) (CAR D))(MATCH (CDR P)(CDR D)))

))

Функция сопоставляет, когда списки имеют одинаковую длину.

Следующий вариант обрабатывает '*'. Это определение функции тоже работает со списками равной длины.

(DEFUN MATCH (P D)

(COND ((AND (NULL P) (NULL D)) T) (1)

((OR (NULL P) (NULL D)) NIL) (2)

((OR (EQUAL (CAR P) (CAR D)) условие OR

(EQUAL (CAR P) '*) 

(MATCH (CDR P)(CDR D)))) - действие

))

(2) условие проверяет образец и факт на равную длину. Далее применяются правила (3) и (4).Если (CAR ОБРАЗЕЦ)=* и равны (CDR P) и (CDR D), то проверка – сопоставимы ли “хвосты”.

Рассмотрим как выполняется сопоставление на конкретном примере. Пусть требуется сопоставить следующие образец и факт:

(цвет * красный) и (цвет яблоко красный)

1) (match ‘(цвет * красный)

‘(цвет яблоко красный))

Ниже приведена схема рекурсивных вызовов функции match. Здесь каждый блок обозначает рекурсивное обращение к функции match c соответствующими значениями аргументов, записанными слева от блока.

2) (match ‘(цвет апельсин красный)

‘(цвет яблоко красный))

Дополним определение функции match так, чтобы обрабатывал-

ся знак &.

(DEFUN MATCH (P D)

(COND ((AND (NULL P) (NULL D)) T)

((OR (NULL P) (NULL D)) NIL)

((OR (EQUAL (CAR P) (CAR D))

(EQUAL (CAR P) '*))

(MATCH (CDR P)(CDR D)))

((EQUAL (CAR P) '&)

(COND (MATCH (CDR P) D) T) (1)

(MATCH (CDR P) (CDR D)) T) (2)

(MATCH P (CDR D)) T) (3)

))))

В определении функции можно использовать либо утверждения 1 и 2, либо 2 и 3.

Пример

Образец – (A & B)

Факт - (A X Y B)

проверим работу функции match

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