Это карта. Каждая карточка отвечает на вопрос «какую форму я вижу?» и ведёт к точному объяснению. Запоминать всё перед курсом не нужно.
Литералы и комментарии
значение ; комментарийЧисла, булевы значения, строки, символы и цитированные имена дают предсказуемые значения. Точка с запятой начинает комментарий до конца строки.
(list 42 #t "tea" #\T 'ready)
; остаток строки игнорируетсяВызовы и вложенность
(процедура аргумент ...)Первое выражение выбирает процедуру. Оператор и аргументы вычисляются слева направо; вложенный вызов заканчивается до использования его значения.
(+ 10 (* 2 3))Имена и локальные связывания
define · let · let* · letrecdefine задаёт верхнеуровневое имя, let — параллельные локальные входы,
let* — последовательные зависимости, letrec — рекурсивные локальные имена.
(let ((price 20) (fee 3))
(+ price fee))Именованные процедуры и lambda
(define (имя x) тело) · (lambda (x) тело)Процедура тоже значение. Дайте ей верхнеуровневое имя через сокращённый
define или создайте на месте через lambda.
(define (double n) (* n 2))
(double 6)Условия
if · cond · case · and · orif выбирает одно из двух выражений, cond проверяет несколько условий.
and и or останавливаются, когда ответ уже известен. Ложен только #f.
(if (>= 62 50) 'free 'standard)Цитированные данные и списки
'данные · (list значение ...)Апостроф сохраняет форму как данные. list вычисляет входы и строит новый
правильный список.
(list 'decision 'allow)Строки, векторы и байты
Строки хранят Unicode-текст. Векторы индексируются и изменяемы в текущем профиле. Байт-векторы хранят ограниченные байты и остаются неизменяемыми.
(list (string-length "Lispex")
(vector-ref #(red green blue) 1))Рекурсия и высший порядок
рекурсия · map · filter · fold · applyДля обхода структуры уменьшайте вход рекурсивно. Для повторного преобразования
передавайте процедуру в map, filter или fold. Правильные хвостовые вызовы
поддерживают рекурсию в форме цикла.
(map (lambda (n) (* n 10)) '(1 2 3))Продолжение для опытных
| Вопрос | Куда перейти |
|---|---|
| Как замыкания разделяют изменяемое связывание? | Связывания и изменение и Замыкания |
Почему 1/3 точное, а 1.0/3 нет? | Точные и неточные числа |
| Как вернуть два результата? | Множественные значения |
| Какая рекурсия использует постоянный стек? | Правильные хвостовые вызовы |
| Когда нужно аварийно покинуть вычисление? | Продолжения и dynamic-wind |
| Как останавливаются бесконечная работа и огромный вывод? | Детерминизм и ресурсы |
Точные допустимые токены и формы находятся в Грамматике чтения и Основных формах. Для последовательного пути вернитесь к Пути обучения.