Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ФЛП.doc
Скачиваний:
18
Добавлен:
27.05.2015
Размер:
632.83 Кб
Скачать

2.2 Основные функции лисПа

Из определение S-выражения также вытекает, что в ЛИСПе принята префиксная форма записи функции, имя которой расположено после открывающейся скобки. Например, выражение 2*x+3 запишется как (+ (* 2 x)), при этом действия выполняются из середины наружу. Структура программы не отличается от структуры данных и появляется возможность записывать функции в виде списков, т.е. данные (списки) и программа (списки) представляются единым образом.

При обращении к функции указывается ее имя и аргументы (фактические параметры – ACTUAL ARGUMENTS). Аргументами функции в общем случае могут быть S-выражения. Связь с формальными параметрами (FORMAL ARGUMENTS) осуществляется по значению.

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

‘ выражение ≡ (QUOTE выражение).

QUOTE – специальная функция с одним аргументом, которая возвращает в качестве значения этот аргумент. Апостроф автоматически переопределятся в QUOTE.

(QUOTE ' y ) (QUOTE y).

Перед константами не надо ставить апостроф, так как число и его значение совпадают.

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

(QUOTE (+ 1 2)) (+ 1 2),

(EVAL (QUOTE (+ 1 2))) 3.

EVAL – это универсальная функция Лиспа, которая может вычислить любое правильно составленное s-выражение.

2.2.1 Функции назначения

Значение символу можно назначить или связать с некоторым значениемс помощью функции SET. Функция SET связывает символ со значением, предварительно вычисляя значение аргументов и возвращает в качестве результата значение второго аргумента

(SET ‘a (+ 2 3)) 5, (2)

(SET ‘a ‘(+ 2 3)) (+ 2 3).

В следующем примере происходит вычисление и первого аргумента

(set 'name '(a b c) ), (set (car name) 'town ),

в результате которого символ a будет связан со значением town.

Если перед первым аргументом нет апострофа, то значение будет присвоено значению этого аргумента. В этом случае необходимо быть довольно аккуратным, поскольку возможны ситуации, которые приводят к ошибкам. Так, если был вызов (2), то следующий вызов (SET a c) приводит к ошибке, поскольку константе 5 значение назначить невозможно.

Функция SETQ отличается от SET тем, что она вычисляет только свой второй аргумент. Она автоматически блокирует вычисление первого аргумента (буква от QUOTE в имени функции). При этом отпадает необходимость апострофа перед первым аргументом

(SETQ a (+ 2 3)) 5,

(SETQ a ‘(+ 2 3)) (+ 2 3).

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