Как программист на Лиспе вы учитесь думать об источнике программы как о данных. Это уже не статический текст, а данные. В некоторых формах Lisp сама программа является той структурой данных, которая выполняется.
Тогда все инструменты ориентированы таким образом. Вместо текстового макропроцессора Лисп имеет систему макросов, которая работает с программами как с данными. Преобразование программ в и из текста также имеет свои инструменты.
Давайте подумаем о добавлении двух элементов вектора:
(let ((v (vector 1 2 3)))
(+ (aref v 0)
(aref v 1)))
В этом нет ничего необычного. Вы можете скомпилировать и запустить его.
Но вы также можете сделать это:
(let ((v (vector 1 2 3)))
(list '+
(list 'aref v 0)
(list 'aref v 1)))
Возвращает список с символом плюса и двумя подсписками. Эти подсписки имеют символ aref, затем значение массива v и значение индекса.
Это означает, что созданная программа содержит фактически символы, но также и данные. Массив действительно является частью подсписков. Таким образом, вы можете создавать программы, и эти программы являются данными и могут содержать произвольные данные.
EVAL затем оценивает программу как данные.
CL-USER 17 > (setf *print-circle* t)
=> T
Выше сказано, что принтер должен печатать циклические структуры данных, чтобы идентичности сохранялись при обратном чтении.
CL-USER 18 > (let ((v (vector 1 2 3)))
(list '+
(list 'aref v 0)
(list 'aref v 1)))
=> (+ (AREF #1=#(1 2 3) 0) (AREF #1# 1))
Теперь давайте проверим данные как программу на Лиспе:
CL-USER 19 > (EVAL (let ((v (vector 1 2 3)))
(list '+
(list 'aref v 0)
(list 'aref v 1))))
=> 3
Если ваш компилятор ожидает, что текст является исходным, вы можете создать эти тексты, но они никогда не смогут напрямую ссылаться на данные. Для этих текстовых исходных текстов было разработано много инструментов, но многие из них, как правило, работают поэтапно. В Лиспе функциональность манипулирования данными может быть непосредственно применена для манипулирования программами, и эта функциональность непосредственно встроена и является частью процесса оценки.
Итак, Лисп дает вам дополнительную степень свободы и новые способы мышления.