Введение в программирование на Лиспе
773123a3

Предикаты и истинность в Лиспе


В Лиспе есть два атомных символа, которые представляют истину и ложь соответственно. Эти два атома - T и NIL. Эти символы - реальные значения всех предикатов в системе. Главная причина в удобстве кодирования. Во многих случаях достаточно отличать произвольное значение от пустого списка.

Не существует формального различия между функцией и предикатом в Лиспе. Предикат может быть определен как функция со значениями либо T либо NIL. Можно использовать форму, не являющуюся предикатом там, где требуется предикат: предикатная позиция условного выражения или аргумент логического предиката. Семантически любое S-выражение, только не NIL, будет рассматриватсья как истинное в таком случае. Предикат EQ ведет себя следующим образом:

  1. Если его аргументы различны, значением EQ является NIL.
  2. Если оба его аргументы являются одним и тем же атомом, то значение - Т.
  3. Если значения одинаковы, но не атомы, то его значение T или NIL в зависимости от того, идентично ли представление аргументов в памяти.
  4. Значение EQ всегда T или NIL. Оно никогда не бывает неопределено, даже если аргументы плохие.

Выполнено достаточно строгое построение совершенно формальной математической системы, называемой "Элементарный ЛИСП". Составляющие этой формальной системы:

  1. Множество символов, называемых S-выражениями.
  2. Система функциональных обозначений для основных понятий, трубемых при программировании обрботки S-выражений.
  3. Формальное представление функциональных обозначений в виде S-выражений.
  4. Универсальная функция (записанная в виде S-выражения), интерпретирующая обращение произвольной функции, записанной как S-выражение, к ее аргументам.
  5. Система базовых функций, обеспечивающих техническую поддержку обработки S-выражений, и специальных функций, обеспечивающих управление вычислениями.

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

Таблица 6.1. Clisp: Функции для обработки программ

(Apply Функция Список-ргументов )Применяет функцию к списку аргументов
( Compile Название )Компилирует названную функцию, кроме того сообщает, успешна ли компиляция
(Eval Форма )Вычисление формы
(Funcall Функция Аргумент … )Применяет функцию к аргументам
(The Тип Форма)Приводит значение Формы к заданному Типу
(Type-of Данное )Выдает тип данного
(Quote Форма )Форма без вычсления выдается как результат



Содержание раздела