Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Изучение системных свойств символа в диалекте языка ЛИСП(1).doc
Скачиваний:
8
Добавлен:
01.05.2014
Размер:
172.03 Кб
Скачать

Камчатский Государственный технический университет

Факультет информационных технологий

Кафедра систем управления

Методические указания

по выполнению курсового проектирования

по дисциплине

«Функциональное и логическое программирование»

Петропавловск-Камчатский

2005

Тема курсового проектирования – «Изучение системных свойств символа в диалекте языка ЛИСП»

Содержание

  1. Цель работы

  2. Теоретические сведения, необходимые для выполнения работы

    1. Системные свойства символа (COMMONLISP)

    2. Функции для определения и модификации списка свойств символа (COMMONLISP)

    3. Область данных интерпретатора mulisp

      1. Числа

      2. Внутреннее представление символа

    4. Организация ввода/вывода

  1. Пример содержательной постановки задачи на создание реляционной базы данных и обработку хранящейся в ней информации

3.1 Описание реляционной базы данных с помощью списка свойств символов (COMMONLISP)

  1. Перечень заданий на курсовое проектирование

  2. Требования к оформлению пояснительной записки

  3. Рекомендуемая литература

Приложение. Фрагменты программы на mulispс пояснениями

Раздел 1

Цель работы

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

В ходе работы студенты самостоятельно изучают особенности диалекта ЛИСПа – например, mulisp.

Во втором разделе настоящих «Методических указаний» приводятся теоретические сведения, необходимые для выполнения каждого задания. На примере CommonLISPа описываются системные свойства символа. Студентам же предстоит изучить системные свойства символа в диалекте ЛИСПа и составить таблицу, аналогичную таблице 2.1, приведенной в разделе 2. Кроме того, студенты самостоятельно осваивают средства ввода/вывода информации вmulisp.

Результатом решения задачи должна стать отлаженная программа, позволяющая создать одно отношение реляционной базы данных (РБД) и организовать в режиме диалога обновление содержащейся в базе информации и получение ответа на запросы, сформулированные в задании. Каждый запрос является структурированным; перед его выполнением пользователь должен в ответ на появляющуюся на экране подсказку задать значения параметров, необходимые для выполнения запроса.

Раздел 2

Теоретические сведения, необходимые для выполнения работы

В зависимости от места в S–выражении символ может обозначать как имя функции, так и имя переменной. Например,

( SETQmax6)

6

(max6 10 3 15)

15

В первом обращении к интерпретатору переменная с именем maxприобретает значение 6 (как побочный эффект функцииSETQ). Во втором случае обращение производится к функции с таким же именем, так как в лисповской форме имяmaxстоит в списке на первом месте.

2.1. Системные свойства символа (common lisp)

Память, которая имеется в распоряжении интерпретатора CommonLISP, разделена на пространства имен, называемые пакетами (package). Внутри пакета имена символов не повторяются. Прочитав имя символа, интерпретатор ищет, встречалось ли оно ранее или до того времени было неизвестно системе. Для нового символа резервируется память, в которой записываются его системные свойства:

  1. Выражение, определяющее пространство имен

  2. Последовательность знаков, задающая внешний вид переменной (printname), или печатное имя

  3. Указатель на значение символа

  4. Определение функции, представленное в виде lambda–выражения

  5. Список свойств (p-list)

Функция-распознаватель SYMBOLPпозволяет установить, является ли символом ее единственный аргумент.

(setq x 3)

(symbolp ‘x)

T

(symbolp x)

NIL

При последнем обращении к интерпретатору выясняется, является ли символом значение х, и поскольку оно равно 3, получается ответ «ложь».

SETQназначает печатное имя. Побочный эффектSETQ– замещение указателя в поле значения символа. Если значение не определено, то оно равноNIL.

Назначение определения функции символу с именем printnameпроизводится с помощью функцииDEFUN, а чтение этого определения осуществляется при обращении к функцииFUNCTION-VALUE.

Если определения функции для данного имени не сделано, то при попытке использовать это имя на первом месте в некотором списке возникает сообщение интерпретатора об ошибке.:

Undefined function <print-name>

С символом можно связать также и список свойств.

    1. Функции для определения и модификации списка свойств символа (COMMON LISP)

Список свойств представляет собой множество пар вида

<индикатор свойства> <значение свойства>

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

Чтениезначения определенного свойства выполняет функция

(GETсимвол индикатор)

Присваиваниезначения определенного свойства некоторому символу производится с помощью обобщенной функции присваиванияSETF.

(SETF(GETсимвол индикатор) значение)

Напомним, что обращение к SETFимеет вид

(SETFячейка значение)

«Ячейку», или адрес, по которому записано значение определенного свойства, доставляет функция GET; она возвращает в качестве значения указатель на ячейку памяти для данного свойства.

Удалениенекоторого свойства символа производится вместе со значением этого свойства при помощи обращения к функции

(REMPROPсимвол индикатор)

REMPROPвозвращает в качестве значения имя (индикатор) удаляемого свойства, а если такого имени не было в списке свойств данного символа, то возвращаетсяNIL.

Список свойств определенного символа можно прочитать целиком с помощью обращения:

(SYMBOL-PLIST символ)

Особенности обработки списка свойств символа в диалекте CommonLISPсведены в приведенную ниже таблицу. Красным цветом в ней выделены поля с названиями системных свойств символа В каждой из остальных строк таблицы в первом слева столбце содержится название операции, которую можно выполнять для символа, проводя назначение или модификацию (если это возможно) значений соответствующих системных свойств. Если некоторая клетка содержит прочерк, это означает, что выполнить соответствующую этой клетке и данному системному свойству операцию невозможно. Например, прочитать печатное имя символа.

Табл. 2.1

Назначение

SETQ

SETQ

SETQ

(побочный

эффект)

DEFUN

(SETF

(GETсимвол индикатор) значение)

Package

Print

name

значение

Определение функции

Список свойств

Чтение

SYMBOL-

VALUE

FUNCTION-

VALUE

(SYMBOL-PLISTсимвол)

(GETсимвол индикатор)

Если не определено

NIL

Undefined function

NIL

    1. Область данных интерпретатора mulisp

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

Различают простые объекты области данных, которые имеют фиксированное число указателей, и сложные. К простым относятся символы, числа и списочные ячейки.

Указатели могут являться ссылками на другие объекты данных, то есть содержать их адреса, либо на структуры данных специального назначения – строка, двоичный вектор и тому подобное

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

Состояние рабочей области можно запомнить в определенном файле при обращении к функции

(SAVE <спецификация_файла> )

Тогда в случае необходимости это состояние можно использовать в другом сеансе общения с интерпретатором, если выполнить обращение к функции

(LOAD <спецификация_файла> )