Введение в программирование на Лиспе
773123a3

Числа и строки


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

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

1 -123 9876543210000000000000123456789

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

8/12 ;= 2/3 3.1415926

Строки заключаются в обычные двойные кавычки:

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

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

(string-equal "строка 1" " строка1");=Nil (ATOM "a+b-c") ;= T (char "стр1" 4 ) ;= "1"

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

Это относится и к операциям над числами и строками.

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

(+ 1 2 3 4 5 6) ;= 21 (- 12 6 3) ;= 3 (/ 3 5) ;= 3/5

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

'1 ;= 1 '"abc" ;= "abc"

Отказ от барьера между представлениями функций и значений дает возможность символьные выражения использовать как для изображения заданных значений, включая любые структуры над числами и строками, так и для определения функций, обрабатывающих любые данные. (Напоминаем, что определение функции - данное.)


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

Таблица 7.1. Базовые фукнции над числами
(= Число … )Истина, если разница между любыми двумя аргументами равна нулю
(/= Число … )Истина, если никакие два аргумента не равны между собой
(> Число … )Истина, если каждый аргумент превышает прешественника
(< Число … )Истина, если каждый аргумент меньше прешественника
(<= Число … )Истина, если каждый аргумент меньше или равен прешественнику
(>= Число … )Истина, если каждый аргумент превышает или равен прешественнику
(* Число … )Произведение произвольного числа аргументов. 1 при их отсутствии.
(+ Число … )Сумма произвольного числа аргументов. 0 при их отсутствии.
(- Число … )Эквивалентно расстановке минусов между аргументами, т.е. (- a b c ) = a – b – c
(/ Число … ) Первое число делится на произведение остальных, среди которых не должно быть нуля.
(1+ Число )( + Число 1)
(1- Число )( - Число 1)
(Boole Операция Целое1 Целое2 )Вычисляет результат применеия побитовой Операции к двум Целым.
(Gcd Число …)Наибольший общий делитель. Ноль без аргументов.
(Lcm Число … )Наименьшее общее произведение, 1 при отсутствии аргументов.
(min Число …)
(max Число …)

Содержание раздела