Песочница

Чтение скобок

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

Вы научитесь находить процедуру и её входные данные в вызове и вычислять результат вложенного выражения. Вы также сможете отличить вызов от определения.

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

Прочитайте вызов

LISPEX
(+ 2 3)

Результат

ВЫВОД
5

Первый элемент, +, задаёт имя вызываемой процедуры. Процедура выполняет операцию над переданными ей значениями. Эти значения называют аргументами. Здесь это 2 и 3.

Обычный вызов записывается так.

(действие вход1 вход2 ...)

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

Прочитайте вложенный вызов

LISPEX
(+ 10 (* 2 3))

Результат

ВЫВОД
16

Лиспекс находит +, вычисляет 10, затем вычисляет (* 2 3). Умножение возвращает 6. Внешний вызов складывает 10 и 6.

Скобки группируют входные выражения каждого вызова. Здесь умножение находится внутри сложения, поэтому его результат становится аргументом +.

Прочитайте определение

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

LISPEX
(define (ширина-с-вылетом ширина-обреза вылет)
  (+ ширина-обреза вылет))

Этот код определяет ширина-с-вылетом и ничего не печатает. Процедура принимает два аргумента с именами ширина-обреза и вылет. Её тело, (+ ширина-обреза вылет), выполняется при вызове процедуры.

define относится к особым формам. У каждой особой формы свои правила вычисления её частей. Здесь (ширина-с-вылетом ширина-обреза вылет) объявляет имя процедуры и имена её входных данных. Это не вызов.

К особым формам также относятся if, quote и lambda. Все они используют скобки, но порядок вычисления зависит от правил конкретной формы.

Попробуйте сами

Предскажите результат до запуска.

LISPEX
(+ 1 (* 2 (+ 3 4)))
Показать ответ

Результат равен 15. Сначала (+ 3 4) возвращает 7. Затем (* 2 7) возвращает 14, а (+ 1 14) возвращает 15.

В определении выше найдите имя процедуры, два имени входных данных и вызов в её теле.

Показать ответ

Процедура называется ширина-с-вылетом. Входные данные названы ширина-обреза и вылет. При выполнении процедуры её тело вызывает + со значениями этих двух имён.

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