Песочница

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

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

Пользуйтесь этой страницей как картой. Каждая карточка отвечает на вопрос «какую форму я вижу?» и ведёт на страницу с точным объяснением поведения. Запоминать всё перед курсом не нужно.

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

значение ; комментарий

Числа, булевы значения, строки, символы и цитированные имена вычисляются в предсказуемые значения. Точка с запятой начинает комментарий до конца текущей строки.

LISPEX
(list 42 #t "tea" #\T 'ready)
; остаток строки игнорируется
Открыть руководство по чтению

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

(процедура аргумент ...)

Первое выражение определяет вызываемую процедуру. Оператор и аргументы вычисляются слева направо. Вложенный вызов завершается раньше, чем внешняя форма использует его значение.

LISPEX
(+ 10 (* 2 3))
Изучить порядок вычисления

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

define · let · let* · letrec

Используйте define для имени верхнего уровня, а let для параллельных локальных входов. Форма let* нужна, когда позднее связывание опирается на более раннее, а letrec вводит рекурсивные локальные имена.

LISPEX
(let ((price 20) (fee 3))
  (+ price fee))
Изучить связывания и область

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

(define (имя x) тело) · (lambda (x) тело)

Процедура представляет собой значение. Ей можно дать имя верхнего уровня через краткую запись define или создать её прямо на месте через lambda.

LISPEX
(define (double n) (* n 2))
(double 6)
Изучить процедуры и арность

Условия

if · cond · case · and · or

if выбирает одно из двух выражений, а cond проверяет несколько условий. and и or останавливаются, как только результат известен. Ложен только #f.

LISPEX
(if (>= 62 50) 'free 'standard)
Выбрать условную форму

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

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

Запись с апострофом сохраняет форму как данные. Процедура list вычисляет входящие выражения и строит новый правильный список.

LISPEX
(list 'decision 'allow)
Изучить данные и агрегаты

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

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

LISPEX
(list (string-length "Lispex")
      (vector-ref #(red green blue) 1))
Открыть справочник текста и байтов

Рекурсия и высший порядок

рекурсия · map · filter · fold · apply

Разбирайте структуры данных с помощью уменьшающихся рекурсивных вызовов или передавайте процедуру в map, filter и fold. Правильные хвостовые вызовы поддерживают рекурсию в форме цикла.

LISPEX
(map (lambda (n) (* n 10)) '(1 2 3))
Построить конвейер данных

Продолжение для опытных

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

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