Новосибирский Государственный Университет
Опубликован: 05.02.2007 | Доступ: свободный | Студентов: 2222 / 413 | Оценка: 4.30 / 4.23 | Длительность: 10:15:00
Лекция 3:

Списки и атомы

< Лекция 2 || Лекция 3: 123 || Лекция 4 >
Аннотация: Третья лекция знакомит с основами символьной обработки информации и структурами данных, удобно приспособленными для символьной обработки. Рассматривается базовый набор элементарных функций над списками и S-выражениями (символьными выражениями).

Основы символьной обработки

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

  1. Природа данных

    Любая информация представляется в форме символьных выражений1Дж. Мак-Карти назвал их S-выражениями - Symbolic expressions Система программирования над такими структурами обычно использует для их хранения всю доступную память, поэтому программист принципиально освобожден от заботы о распределении памяти под отдельные блоки данных.

  2. Самоописание обработки символьных выражений

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

  3. Подобие машинным языкам

    Система программирования на Лиспе допускает, что программа может интерпретировать и/или компилировать программы, представленные в виде символьных выражений. Это сближает программирование на Лиспе с методами низкоуровневого программирования и отличает от традиционной методики применения языков высокого уровня.

Структуры данных

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

A
Nil
ATOM
LISP
Занятие2
Новый_год
ВотДлинныйАтомНуОченьДлинныйНоЕслиНадоАтомМожетБытьЕщеДлинннее 
Ф4длш139к131б
Пример 3.1.

Одинаково выглядящие атомы не различимы по своим свойствам. Термин "атом" выбран по аналогии с химическими атомами, строение которых – предмет другой науки. Согласно этой аналогии атом может иметь достаточно сложное строение, но атом не предназначен для разбора на части базовыми средствами языка.

Более сложные данные в Лиспе выстраиваются из одинаково устроенных бинарных узлов, содержащих пары объектов произвольного вида. Каждый бинарный узел соответствует минимальному блоку памяти, выделяемому системой программирования при организации и обработке структур данных. Выделение блока памяти и размещение в нем пары данных выполняет функция CONS (от слова consolidation), а извлечение левой и правой частей из блока выполняют функции CAR и CDR соответственно ("content of address part of register" , "content of decrement part of register").

Функция Аргументы Результат
Cons

Атом

X

( Атом . X )
Car ( Атом . X ) Атом
Cdr ( Атом . X ) X

При работе с системой соответствующие выражения показаны ниже:

Функция Аргументы Вид для системы
Cons

Атом

X

(CONS 'ATOM ' X )
Car ( Атом . X ) (CAR '(ATOM . X ))
Cdr ( Атом . X ) (CDR '(ATOM . X ))

Типичная форма записи символьных выражений называется списочной записью ( list-notation ). Элементы списка могут быть любой природы.

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

По соглашению атом Nil выполняет роль пустого списка. Бинарный узел, содержащий пару атомов ATOM и Nil, рассматривается как одноэлементный список (ATOM ):


или для наглядности:


Если вместо атома " ATOM " подставлять произвольные атомы, а вместо " Nil " - произвольные списки, затем вместо атомов - построенные списки и так далее, то мы получим множество всех возможных списков. Можно уточнить, что список - это заключенная в скобки последовательность из разделенных пробелами атомов или списков.

(C )

(B C )

(C (A B))


3.2.
                    
< Лекция 2 || Лекция 3: 123 || Лекция 4 >