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