|
||
Правила записи программ и отличия от стандарта Лисп | ||
Алфавит HomeLisp включает латинские и русские буквы (заглавные и строчные), цифры и все спецзнаки,
которые есть на стандартной клавиатуре. Имена атомов могут включать любые знаки (но числа должны начинаться
с цифры и иметь "правильную" структуру). Так 1A - просто атом, 123 - число типа FIXED,
1e1 - число типа FLOAT (в научной нотации).
Несколько слов о реализации языка. Разработчик придерживался
стандарта Лиспа из книги Лаврова и Силагадзе (практически
совпадающего с оригиналом великого Дж. МакКарти).
Сделаны лишь некоторые дополнения (не затрагивающие основных
концепций языка):
|
||
Типы данных и особенности арифметики | ||
В HomeLisp имеются данные следующих типов: FIXED, FLOAT, BITS и STRING.
Данные типа FIXED - это целые числа практически неограниченной разрядности. Описываемые ниже функции
PLUS, DIFFERENCE, TIMES, QUOTIENT, REMAINDER позволяют вычислить, например, величину "100 факториал" или "2 в сотой
степени". Данные типа FLOAT соответствуют числам с плавающей точкой двойной точности (DOUBLE). Для работы с данными типа FLOAT можно использовать функции PLUS, DIFFERENCE, TIMES, ADD1, SUB1. Для деления чисел типа FLOAT следует использовать функцию DIVIDE (отсутствующую в реализации Лаврова и Силагадзе). Попытка использовать для деления чисел с плавающей точкой функции QUOTIENT и REMAINDER приведет к ошибке. Данные типа BITS представляют собой 32-х битовые шкалы. Над ними можно выполнять битовые поразрядные операции LOGAND, LOGOR, LOGXOR, а также сдвигать в обе стороны, используюя функцию с двумя аргументами LEFTSHIFT. Второй аргумент задает количество сдвигов (число типа FIXED). Если оно отрицательно - сдвиг выполняется вправо.
Арифметика HomeLisp частично полиморфна. У функций PLUS, DIFFERENCE, TIMES допустимы
аргументы типов FIXED и/или FLOAT. При вычислении происходит "поглощение" типом FLOAT
типа FIXED. Так, при вычислении выражения: будет получен результат 556.0, имеющий тип FLOAT. Тогда, как при вычислении выражения: будет получен результат 556, имеющий тип FIXED. Функция EXPT (возведение в степень) возвращает результат типа FIXED только если оба ее аргумента имеют тип FIXED. В противном случае возвращается результат типа FLOAT. Дополнительно следует отметить, что попытка возведения отрицательного числа (любого типа) в вещественную степень (даже с нулевой дробной частью) вызовет ошибку. Тогда как возведение отрицательного числа в целую степень выполняется без проблем. Нуль в любой положительной степени равен нулю. Попытка возвести нуль в отрицательную степень вызовет ошибку. Возведение числа в нулевую степень дает единицу. Функции инкремента и декремента ADD1, SUB1 возвращают результат того же типа, что и аргумент. Имеется еще один встроенный тип данных большие двоичные объекты - BLOB-ы. Каждый такой объект представляет собой двоичный буфер в оперативной памяти. Этот буфер можно заполнять программно или загружать двоичными данными из файлов. Имеется развитый набор манипулирования BLOB-ами и их содержимым. Более подробно действия с BLOB-ами описаны в соответствующем разделе документации. |
||