Песочница

Синтаксис одним взглядом

Просмотрите повседневный синтаксис Лиспекса на одной странице с полными примерами, результатами и прямыми ссылками в руководство.

Найдите пример нужной записи, прочитайте результат и перейдите по ссылке к полным правилам. Карточки служат справочником во время работы над программой.

Запускайте полный пример каждой карточки отдельно в Песочнице. Под примером указано значение, которое она показывает.

Литералы и комментарии

значение ; комментарий
LISPEX
(list 42 #t "tea" #\T 'ready)
; остаток строки игнорируется

Результат

ВЫВОД
(42 #t "tea" #\T ready)

Числа, логические значения, строки и отдельные символы текста можно записать напрямую. Апостроф в 'ready делает ready значением типа «символ». Точка с запятой начинает комментарий до конца строки.

Открыть руководство по чтению

Вызовы и вложенность

(процедура аргумент ...)
LISPEX
(+ 10 (* 2 3))

Результат

ВЫВОД
16

Внутренний вызов (* 2 3) возвращает 6, поэтому внешний складывает 10 и 6. Первое выражение в вызове выбирает процедуру. Это выражение и аргументы вычисляются слева направо.

Изучить порядок вычисления

Имена и локальные значения

define · let · let* · letrec
LISPEX
(let ((ширина-обреза 20) (вылет 3))
  (+ ширина-обреза вылет))

Результат

ВЫВОД
23

let даёт значениям локальные имена. Здесь ширина-обреза равно 20, а вылет равно 3. Начальные выражения используют внешнюю область видимости, поэтому не могут обращаться к новым именам друг друга. Для имени верхнего уровня используйте define. Форма let* нужна, когда следующее локальное значение использует предыдущее имя, а letrec нужен для рекурсивных локальных определений.

Изучить имена и область видимости

Именованные процедуры и lambda

(define (имя x) тело) · (lambda (x) тело)
LISPEX
(define (double n) (* n 2))
(double 6)

Результат

ВЫВОД
12

define задаёт имя процедуры и её аргументы. Здесь double умножает аргумент на 2. Процедура сама является значением. Создать её без имени позволяет lambda.

Изучить процедуры и число аргументов

Условия

if · cond · case · and · or
LISPEX
(if (< 1 2) 'next-page 'keep)

Результат

ВЫВОД
next-page

if выбирает 'next-page, поскольку одна оставшаяся строка меньше двух. cond проверяет условия по порядку, а case выбирает ветвь по совпадению значения. and и or останавливаются, когда результат известен. Только #f считается ложным.

Выбрать условную форму

Цитированные данные и списки

'данные · (list значение ...)
LISPEX
(list 'decision 'allow)

Результат

ВЫВОД
(decision allow)

Апостроф сохраняет данные без вычисления. Здесь 'decision и 'allow имеют тип «символ». list вычисляет аргументы и помещает их значения в новый список.

Изучить данные и составные значения

Строки, векторы и байты

LISPEX
(list (string-length "Lispex")
      (vector-ref #(red green blue) 1))

Результат

ВЫВОД
(6 green)

string-length считает символы текста в "Lispex". vector-ref выбирает элемент по индексу, начиная с нуля, поэтому индекс 1 даёт green. Строки хранят текст Unicode. Векторы содержат упорядоченные элементы и допускают изменение в текущем профиле языка. Байтовые векторы хранят значения от 0 до 255 и не допускают изменения.

Открыть справочник текста и байтов

Обработка списков и рекурсия

рекурсия · map · filter · fold · apply
LISPEX
(map (lambda (n) (* n 10)) '(1 2 3))

Результат

ВЫВОД
(10 20 30)

map вызывает процедуру для каждого элемента списка и возвращает список результатов. filter отбирает элементы, а свёртки объединяют их в накапливаемое значение. apply вызывает процедуру с аргументами из списка. Рекурсивная процедура вызывает себя. Хвостовые вызовы позволяют повторять рекурсивные вызовы без роста стека.

Изучить обработку списков

Узнайте подробности

ВопросКуда перейти
Как процедуры совместно используют меняющееся значение?Связывания и изменение и Замыкания
Почему 1/3 точное, а (/ 1.0 3) нет?Точные и приближённые числа
Как вернуть два результата?Множественные значения
Какая рекурсия использует постоянный стек?Правильные хвостовые вызовы
Когда нужно аварийно покинуть вычисление?Продолжения и dynamic-wind
Как останавливаются бесконечная работа и огромный вывод?Детерминизм и ресурсы

Точные допустимые токены и виды форм описаны в Грамматике чтения и Основных формах. Для пошагового прохождения материала вернитесь к Пути обучения.