Предикаты и истинность в Лиспе
В Лиспе есть два атомных символа, которые представляют истину и ложь соответственно. Эти два атома - T и NIL. Эти символы - реальные значения всех предикатов в системе. Главная причина в удобстве кодирования. Во многих случаях достаточно отличать произвольное значение от пустого списка.
Не существует формального различия между функцией и предикатом в Лиспе. Предикат может быть определен как функция со значениями либо T либо NIL. Можно использовать форму, не являющуюся предикатом там, где требуется предикат: предикатная позиция условного выражения или аргумент логического предиката. Семантически любое S-выражение, только не NIL, будет рассматриватсья как истинное в таком случае. Предикат EQ ведет себя следующим образом:
- Если его аргументы различны, значением EQ является NIL.
- Если оба его аргументы являются одним и тем же атомом, то значение - Т.
- Если значения одинаковы, но не атомы, то его значение T или NIL в зависимости от того, идентично ли представление аргументов в памяти.
- Значение EQ всегда T или NIL. Оно никогда не бывает неопределено, даже если аргументы плохие.
Выполнено достаточно строгое построение совершенно формальной математической системы, называемой "Элементарный ЛИСП". Составляющие этой формальной системы:
- Множество символов, называемых S-выражениями.
- Система функциональных обозначений для основных понятий, трубемых при программировании обрботки S-выражений.
- Формальное представление функциональных обозначений в виде S-выражений.
- Универсальная функция (записанная в виде S-выражения), интерпретирующая обращение произвольной функции, записанной как S-выражение, к ее аргументам.
- Система базовых функций, обеспечивающих техническую поддержку обработки S-выражений, и специальных функций, обеспечивающих управление вычислениями.
Выполненное определение универсальной функции – макетный образец Лисп-системы, основные черты которой унаследованы многими системами программирования.
(Apply Функция Список-ргументов ) | Применяет функцию к списку аргументов |
( Compile Название ) | Компилирует названную функцию, кроме того сообщает, успешна ли компиляция |
(Eval Форма ) | Вычисление формы |
(Funcall Функция Аргумент … ) | Применяет функцию к аргументам |
(The Тип Форма) | Приводит значение Формы к заданному Типу |
(Type-of Данное ) | Выдает тип данного |
(Quote Форма ) | Форма без вычсления выдается как результат |