Лисп/Типы данных: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
Работа на дому официальное трудоустройство.
Строка 1:
Ведущая компания в России и странах СНГ по продаже авиабилетов «Airline-online»
<div style="max-width:60em;margin:1em auto 0 4%;">
Действующие диалекты Лиспа способны работать со всеми «обычными» типами данных — от целых чисел до ассоциативных массивов, — на уровне любого передового высокоуровнего языка. При этом трансляторы выдают код, по производительности порой не уступающий тому же для Си. Однако, в Лиспе нет и не будет указателей.
Крупнейшая международная компания по продаже А/В билетов
 
срочно набирает сотрудников на постоянную основу для несложной
Сначала же Лисп оперировал только символами и списками (отсюда и название — <u>Lis</u>t <u>p</u>rocessor).
работы через интернет, с ежедневными выплатами от 11 000 руб.
 
'''Символ — это имя''', состоящее из букв, цифр и[ли] специальных знаков <code>{ [ < ! ? . - @ # $ % ^ & * _ + / > ] }</code>. Символ обозначает произвольный объект или явление из прикладной области, вспомогательные объекты внутри программы, или некоторую структуру исходного кода. Имя функции — это тоже символ. Символ всегда имеет значение.
Работая в нашей компании Вы получаете:
(setq x "value-of-x") => "value-of-x" ; присвоение символу значения
>> (symbol-value 'x) => value-of-x ; вывод значения символа
- Соблюдение трудового кодекса
 
- Полный соцпакет, оплачиваемый отпуск, больничный, санаторий.
Особо выделяются логические символы <var>t</var> и <var>nil</var>: t — это «истина», «true».
- Каждый наш сотрудник на дому гарантированно получает высокий доход. руб. в день.
>> (symbol-value t) => t
- Гарантированные стабильные выплаты заработанных денег.
 
- Выплаты происходят ежедневно на банковские карты или электронные кошельки.
А nil, по крайней мере в Common Lisp’е — это «ложь»/«false», <var>null</var>, либо <code>()</code> — пустой список.
 
Пройдите регистрацию у нас на сайте. > airline.zarplatt.ru <
О подобной многозначности символа <var>nil</var> будет подробно сказано позже, когда будут обсуждаться списки, логические операции, функции…
 
Без вложений, опыт и профессиональные навыки не требуются!
Символы t и nil суть встроенные '''константы''' и не могут быть переопределены (действительно - зачем?). Константа - символ, имеющий постоянное значение. Константа определяется (переопределяется) с помощью директивы <code>defconstant</code>.
 
Вы всегда можете проверить, является ли некий объект символом (предикат symbolp) и узнать его имя (функция symbol-name) или значение (symbol-value). Вы уже могли догадаться об этом, если видели чуть выше маленький клочок кода :-)
Более общим понятием является '''атом'''. атомы &equiv; символы ⋃ числа.
 
'''Список''' - структура, состоящая из элементов, которыми могут быть атомы или другие списки.
(t (t nil t) t),
(1 (2 (3 4) 5))
— это списки. Список может не содержать элементов вовсе, такой список называется пустым и обозначается () или nil.
 
Список - это фундамент лиспа, ибо в зависимости от интерпретации список может представлять как данные, так и лисповый код. (symbol-value t) - тоже список.
 
Помимо вышеперечисленного, в лиспе есть еще тонна различных типов данных. Но у тебя, уважаемый читатель, уже есть достаточно знаний, чтобы перейти к изучению функций, что и советую сделать, прежде чем переходить к знакомству с другими типами данных. А у меня пока будет время, чтобы дописать этот раздел :-)
 
'''Точечная пара''' (она же "точечный список") - структура, состоящая из двух элементов, разделенных точкой. Выглядит это примерно так:
1. (1 . 2),
2. (('a 'b) . 3),
3. ('a . (4 . 9)),
4. ('a . nil) и т.д.
Первый элемент точечной пары называется головой, второй элемент хвостом.
Конструировать точечные пары можно при помощи функции cons, у которой всего два аргумента - голова и хвост будущей точечной пары. Например, вызов (cons 1 2) создаст точечную пару (1 . 2). Функция cons не создает список, путем присоединения головы списка к ее хвосту, как пишут во многих учебниках и интернетах.
 
Как видно из примеров конструировать можно точечные пары, элементами которых являются точечные пары. Рассмотрим третий пример:
('a . (4 . 9)).
Как правило такие точечные пары записывают в более простом виде
('a 4 . 9).
Как видно, это выражение очень сильно напоминает известную нам структуру - список. Собственно, список и есть структура, состоящая из точечных пар. Если хвостовой элемент точечной пары nil, то, для краткости записи точка опускается и, например, из примера 4 получаем ('a). Что это? Правильно - список, состоящий из одного элемента.
Аналогично и с примером 3: если, скажем, у нас вместо 9 будет nil:
('a . (4 . nil))
то, для краткости избавляясь от скобочек получим
('a 4 . nil)
а для еще более краткой записи и опустим точку с nil:
('a 4)
Наша точечная пара приобрела вид списка из двух элементов.
Например такая сложная пара (1 . (2 . (3 . (4 . nil)))) после всех проделанных последовательных упрощений записи (предлагаю читателю этим заняться самостоятельно), приобретет вид простенького списка (1 2 3 4).
 
И наоборот, можно любой список представить в виде точечной пары:
(1 2 (3 4) 5) -> (1 . (2 . ((3 . (4 . nil)) . (5 . nil))))
 
Итак, списки - это синтаксический сахар над точечными парами. Сами точечные пары могут быть использованы и как двухэлементные кортежи для создания, например, key-value хранилищ.
 
{{BookCat}}