Инструменты пользователя

Инструменты сайта


examination:flp:question4

4. Построение в языке РС – Лисп списков из атомов и подсписков.

Более общим понятием является атом. атомы ≡ символы ⋃ числа. Список - структура, состоящая из элементов, которыми могут быть атомы или другие списки.

 (t (t nil t) t)

,

(1 (2 (3 4) 5))

— это списки. Список может не содержать элементов вовсе, такой список называется пустым и обозначается () или nil. Список - это фундамент лиспа, ибо в зависимости от интерпретации список может представлять как данные, так и лисповый код. (symbol-value t) - тоже список.

Атом является основным простейшим типом данных. В современном мире, когда мы изучаем составные части атома (в физике), такие, как электроны, протоны, нейтроны, легко забыть, что первоначальное значение слова «атом» - это «тот, который не может быть дальше разделен», но именно в этом смысле «атом» употребляется в языке LISP. Атомы могут быть числовыми, литеральными и строковыми.

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

Любая программа на языке Лисп состоит из последовательности выражений (форм). Результат работы программы состоит в вычислении этих выражений. Все выражения записываются в виде списков — одной из основных структур Лиспа, поэтому они могут легко быть созданы посредством самого языка. Это позволяет создавать программы, изменяющие другие программы или макросы, позволяющие существенно расширить возможности языка.

Список является последовательностью элементов любого рода, в том числе других списков. Например, (1 3/7 'foo #'+) состоит из целого числа, рациональной дроби, символа foo и указателя на функцию сложения. Выражения представляются списками в префиксной записи: первый элемент должен быть формой, то есть функцией, оператором, макросом или специальным оператором; прочие элементы — аргументы этой формы, передаваемые форме для обработки. Функция list возвращает список состоящий из её аргументов: например, (list 1 3/7 'foo #'+) возвращает список, упомянутый ранее. Если некоторые элементы являются выражениями, то сначала вычисляется их значение: (list 1 2 (list 1 2)) возвращает (1 2 (1 2)). Арифметические операторы записываются по тому же принципу, например

(+ 4 (* 2 3))

выдаёт 10.

examination/flp/question4.txt · Последние изменения: 2014/01/15 08:17 (внешнее изменение)