Скачиваний:
8
Добавлен:
01.05.2014
Размер:
6.83 Кб
Скачать

Шаг 3. Простейшие типы данных. Точечная пара     На этом шаге мы продолжим изучение простейших типов данных, в частности, введем такое понятие, как точечная пара.

    Синтаксически точечная пара определяется следующим образом: <Точечная пара> ::= (<Атом> . <Атом>) | (<Атом> . <Точечная пара>) ¦ (<Точечная пара> . <Атом>) | (<Точечная пара> . <Точечная пара>)     Таким образом, точечная пара - это упорядоченная пара, элементами которой могут быть как атомы, так и точечные пары, а точка играет роль разделителя. Приведем примеры точечных пар: (JOHN . SMITH) (SIN . (X . (PLUS . Y))) (A . ((B . 1) . NIL))     Часто бывает удобно не различать атомы и точечные пары. В этом случае говорят о S-выражениях (от Symbolic - символьный). Таким образом, по определению ****************************************************** * S - в ы р а ж е н и е ::= Атом ¦ Точечная пара * ****************************************************** или же S-выражение ::= Атом | (S-выражение . S-выражение)     "S-выражение - это либо атом, либо левая скобка, за которой следуют S-выражение, точка, S-выражение и правая скобка".     Замечания. 1. Построим грамматику для S-выражений языка LISP. Если атом считать терминальным символом, то грамматика для S-выражений выглядит так: <S> --> ATOM <S> --> (<S>.<S>) Приведем пример вывода в данной контекстно-свободной грамматике: <S> --> (<S>.<S>) --> --> ((<S>.<S>).<S>) --> --> ((ATOM . <S>) . <S>) --> --> ((ATOM . (<S> . <S>)) . <S>) --> --> ((ATOM . (ATOM . ATOM)) . <S>) --> --> ((ATOM . (ATOM . ATOM))) . ATOM)

2. Числа в системе muLISP85 могут подразделяться на: целые и дробные.     Во внутреннем представлении целые числа далее подразделяются на: малые целые(меньше, чем 65536 по величине) и большие целые. За исключением функции EQ, различие между малыми и большими целыми числами на другие функции muLISP не влияет.     Дробные и большие целые числа не запоминаются единственным образом, поэтому числа с одинаковыми значениями могут сосуществовать в системе.     Число описывается с помощью четырех элементов-указателей: identity (тождество). Этот элемент содержит указатель самого числа. Следовательно, на числа не должно быть ссылок, т.к. они выражают сами себя. Данный элемент может быть доступен в качестве CAR-элемента числа, но он не может быть изменен программой muLISP; sign (знак). Этот элемент определяет знак числа и то, является ли оно малым целым, большим целым или дробным. Элемент содержит указатель одного из шести символов в соответствии с таблицей: Таблица 1. Значения элемента "знак"   Положительное Отрицательное Малое число NIL T Большое число LAMBDA NLAMBDA Дробное число MACRO SPECIAL Содержимое элемента знака может быть доступно в качестве cdr-элемента числа, но не может быть изменено программой muLISP; length (длина): если число является малым целым, то этот элемент содержит величину данного целого; если число - большое целое, то этот элемент содержит длину слова вектора числа; если число - дробное, то этот элемент содержит указатель числителя дробного числа, который должен быть целым; vector (вектор): если число - малое целое, то данный элемент содержит указатель на другое малое целое или 1; если число - большое целое, то данный элемент содержит указатель на наименьший значимый байт (слово) вектора числа.     Вектор числа - это ряд смежных байтов (слов) в памяти, используемый для хранения величины числа muLISP в двоичном виде. Байты (слова) вектора числа хранятся в обратном порядке (более значимые байты (слова) хранятся последовательно, начиная с меньших адресов памяти). Если число - дробное, то данный элемент содержит указатель знаменателя этого числа, который должен быть положительным целым числом.

    На следующем шаге будет введено понятие списка.

Предыдущий шаг Содержание Следующий шаг

Соседние файлы в папке Язык программирования ЛИСП