logo
Функционально-логическое программирование Prolog, LISP

21. Числа и мультиоперации

Любую информацию можно представить в виде символьных выражений. В качестве основных видов символьных выражений выбраны списки и атомы.

Атом - неделимое данное, представляющее информацию произвольной природы.

Во многих случаях знание природы информации дает более четкое понимание особенностей изучаемых механизмов. Программирование работы с числами и строками - привычная, хорошо освоенная область информационной обработки, удобная для оценки преимуществ использования функционалов. Опуская технические подробности, просто отметим, что числа и строки рассматриваются как самоопределимые атомы, смысл которых не требует никакого ассоциирования, он понятен просто по виду записи.

Например, натуральные числа записываются без особенностей и могут быть почти произвольной длины:

1

-123

9876543210000000000000123456789

Можно работать с дробными и вещественными числами:

2/3

3.1415926

Строки заключаются в обычные двойные кавычки: "строка любой длины из произвольных символов, включая все что угодно".

Список - составное данное, первый элемент которого может рассматриваться как функция, применяемая к остальным элементам, также представленным как символьные выражения. Это относится и к операциям над числами и строками:

(+ 1 2 3 4 5 6) = 21

(- 12 6 3) = 3

(/ 3 5) = 3/5

(1+ 3) = 4

Большинство операций над числами при префиксной записи естественно рассматривать как мультиоперации от произвольного числа аргументов.

(string-equal "строка 1" "строка1") = Nil

(ATOM "a+b-c") = T

(char "стр1" 4 ) = "1"

Со строками при необходимости можно работать посимвольно, хотя они рассматриваются как атомы.

Любой список можно превратить в константу, поставив перед ним <'> апостроф. Это эквивалентно записи со специальной функцией QUOTE. Для чисел и строк в этом нет необходимости, но это не запрещено.

'1 = 1

'"abc" = "abc"

Можно строить композиции функций. Ветвления представлены как результат специальной функции COND, использующей отличие от Nil в качестве значения <истина>. Числа и строки таким образом оказываются допустимыми представлениями значения <истина>. Отказ от барьера между представлениями функций и значений дает возможность использовать символьные выражения как для изображения заданных значений, включая любые структуры над числами и строками, так и для определения функций, обрабатывающих любые данные. (Напоминаем, что определение функции - данное.) Функционалы - это функции, которые используют в качестве аргументов или результатов другие функции. При построении функционалов переменные могут играть роль имен функций, определения которых находятся во внешних формулах, использующих функционалы.

.

.