Шаг 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 могут подразделяться на:

    Во внутреннем представлении целые числа далее подразделяются на:

За исключением функции EQ, различие между малыми и большими целыми числами на другие функции muLISP не влияет.

    Дробные и большие целые числа не запоминаются единственным образом, поэтому числа с одинаковыми значениями могут сосуществовать в системе.

    Число описывается с помощью четырех элементов-указателей:

Таблица 1. Значения элемента "знак"
 
Положительное
Отрицательное
Малое число
NIL
T
Большое число
LAMBDA
NLAMBDA
Дробное число
MACRO
SPECIAL
Содержимое элемента знака может быть доступно в качестве cdr-элемента числа, но не может быть изменено программой muLISP;

    Вектор числа - это ряд смежных байтов (слов) в памяти, используемый для хранения величины числа muLISP в двоичном виде. Байты (слова) вектора числа хранятся в обратном порядке (более значимые байты (слова) хранятся последовательно, начиная с меньших адресов памяти). Если число - дробное, то данный элемент содержит указатель знаменателя этого числа, который должен быть положительным целым числом.




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




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