Песочница

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

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

Это карта. Каждая карточка отвечает на вопрос «какую форму я вижу?» и ведёт к точному объяснению. Запоминать всё перед курсом не нужно.

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

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

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

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-текст. Векторы индексируются и изменяемы в текущем профиле. Байт-векторы хранят ограниченные байты и остаются неизменяемыми.

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
Как останавливаются бесконечная работа и огромный вывод?Детерминизм и ресурсы

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