Вы предскажете, как апостроф превращает вызов в данные.
Вы также извлечёте решение из списка с помощью car и cdr.
Сначала прочитайте раздел Чтение скобок. Запускайте каждый пример отдельно на площадке, чтобы увидеть результат.
Здесь keep означает оставить заголовок раздела на текущей странице.
Сравните вызов и цитированный список
(+ 2 3)Результат
5Этот код вызывает + с числами 2 и 3.
Теперь добавьте апостроф.
'(+ 2 3)Результат
(+ 2 3)В результате получается список из трёх элементов, символа + и чисел 2 и 3.
Символ обозначает значение, которое можно использовать как имя в коде.
Здесь + остаётся символом в списке, поэтому сложение не выполняется.
Начальный ' сокращённо обозначает quote.
Она возвращает следующие за ней данные без вычисления их как кода.
Вызовы и списки данных используют одинаковую запись со скобками.
Прочитайте решение из списка
(define answer '(decision keep))
(car (cdr answer))Результат
keepanswer именует список из двух символов, decision и keep.
Первый символ обозначает вид результата. Второй содержит решение.
Для непустого списка car возвращает первый элемент, а cdr возвращает оставшийся список.
Здесь (cdr answer) возвращает (keep).
Внешний car извлекает его первый элемент, символ keep.
Теми же операциями можно разобрать цитированный вызов, например '(+ 2 3).
Программа также может создавать списки, представляющие новые программные выражения.
Узнайте связанные обозначения
quote сохраняет фиксированные данные.
Чтобы построить список с вычисляемыми частями, можно использовать quasiquote.
Эти четыре строки показывают обозначения, а не программу для запуска.
'x
`x
,x
,@xs| Запись | Название | Значение |
|---|---|---|
'x | quote | Сохранить x как данные |
`x | quasiquote | Задать шаблон данных с вычисляемыми частями |
,x | unquote | Внутри quasiquote вставить значение x |
,@xs | unquote-splicing | Внутри quasiquote вставить элементы списка xs |
Обозначения с запятой используются внутри quasiquote.
В этом уроке для всех фиксированных списков достаточно quote.
Попробуйте сами
Предскажите оба элемента результата до запуска.
(list (+ 1 2) '(+ 1 2))Показать ответ
Результат равен (3 (+ 1 2)).
Первый аргумент list вызывает + и возвращает 3.
Второй аргумент цитируется и возвращает список из трёх элементов (+ 1 2).
list объединяет два значения в один список.
Объясните, почему (car (cdr answer)) возвращает символ, а (cdr answer) возвращает список.
Затем перейдите к разделу Данные, условия и решения,
чтобы выбрать решение по условию.