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

3. Основы языка лисп

3.1. Символы и списки

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

Символы в языке Коммон Лисп. Символы могут состоять из букв, цифр и некоторых других знаков, а именно

+ - * / @ $ % ^ & _ > < . (точка) ? ! { } [ ] :

В состав символов можно включать пробел, запятую, точку с запятой, круглые скобки. Для этого либо символ с двух сторон ограничивается вертикальной чертой (|), либо перед каждым таким специальным знаком, входящим в символ, ставится обратная косая черта (\).

Русские буквы в XLisp не используются.

Символы могут состоять из строчных и прописных латинских букв, которые отождествляются и представляются прописными буквами.

Числа являются константами. В языке используются числа в обычной записи. Числа не являются символами, так как число не может представлять иные лисповские объекты, кроме самого себя, т. е. своего числового значения. Примеры чисел различных типов: 56, 67.89, 56.45 E -3, 5/8.

Логические значения T и NIL. Символы T и NIL имеют специальное назначение: T обозначает логическое значение "истина", NIL обозначает "ложь". Символы T и NIL всегда имеют одно и то же фиксированное встроенное значение. Их нельзя использовать в качестве имен других лисповских объектов. Важное замечание: значение "истина" изображается любым объектом Лиспа, отличным от символа NIL.

Константы и переменные. Числа и логические значения T и NIL являются константами, остальные символы – переменными, которые используются для обозначения других лисповских объектов.

Атомы = символы + числа. Символы и числа представляют собой те простейшие объекты Лиспа, из которых строятся остальные структуры. Они называются атомарными объектами или атомами.

Построение списков из атомов и подсписков. Список в Лиспе - упорядоченная последовательность, элементами которой являются атомы или списки (подсписки). Списки заключаются в круглые скобки, элементы списка разделяются пробелами. Список всегда начинается с открывающей скобки и заканчивается закрывающей скобкой.

Пример: (56 g ( a (b) s) 1/2 +)

Список - это многоуровневая структура данных, в которой открывающие и закрывающие скобки должны быть в строгом соответствии (сбалансированы).

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

Атомы и списки называются символьными выражениями.

Различная интерпретация списков. Структурные данные и программы в Лиспе представляются в виде списков. Например, список (+ 3 4) можно интерпретировать в зависимости от окружения и использования либо как действие, дающее в результате число 7, либо как список, состоящий из трех элементов.

3. 2. Понятие функции

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

(f x), (g x y), (h x (g y z)) и т. д. Таким же образом записываются арифметические действия:

(+ x y), (* x (+ y z)) и т. д.

Лисп содержит также и средства, необходимые для задания способа записи и расширения языка в желаемом направлении.

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

Диалог с интерпретатором Лиспа. Лисп обычно используется в диалоге (интерактивно) в режиме интерпретации.

Обычный цикл работы Лиспа:

  • приглашение интерпретатора для ввода >,

  • пользователь вводит выражение,

  • интерпретатор вычисляет выражение и выдает значение этого выражения.

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

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

QUOTE блокирует вычисление выражения. В некоторых случаях не надо вычислять значение выражения, а нужно само выражение. Нас, например, может не интересовать значение функционального вызова (+ 2 3), равное 5, а мы хотим обрабатывать форму (+ 2 3) как список. В таких случаях используют специальную функцию QUOTE с одним аргументом, которая ничего с ним не делает, даже не вычисляет его значение, а возвращает в качестве значения вызова сам этот аргумент:

> (quote (+ 2 3))

(+ 2 3) В качестве краткого обозначения для функции QUOTE используют апостроф перед аргументом:

‘выражение<===> (quote выражение ) Поэтому

> ‘(+ 2 ‘(* 3 5))

(+ 2 (quote (* 3 5)))

Числа и константы T и NIL не надо предварять апострофом.

На месте имени функции в функциональном вызове апостроф не используется. Интерпретатор Коммон Лиспа не допускает использование в качестве первого элемента вызова функции вычисляемого выражения.

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