Результат. Найти первый элемент внутри пары скобок, отделить его от следующих частей и понять, является ли выражение обычным вызовом или особой формой.
Что нужно знать сначала. Ничего. Эта страница предназначена и для читателя, который никогда не писал программ, и для того, кто написал их много, но споткнулся о скобки.
Одна основная форма используется снова и снова
У большинства языков большой синтаксис. В них есть вызовы функций, операторы с приоритетом, инструкции и блоки, и для каждого из них приходится запоминать свою форму.
Этот язык снова и снова использует одну основную форму.
(действие вход1 вход2 ...)В обычном вызове первый элемент внутри пары скобок указывает, какую процедуру вызвать. Всё после него передаётся как аргументы. Этого правила чтения хватает для большинства выражений, которые встречаются в начале.
(+ 2 3)Прочитайте это вслух как «сложить два и три». Выражение даёт 5. Знак плюса
здесь не особый оператор между двумя числами, а первый элемент, вызываемая
процедура.
Небольшой набор форм, включая define, if, quote и lambda, использует
те же скобки, но управляет вычислением вместо вызова процедуры. В этих особых
формах первый элемент называет форму, а остальные части составляют синтаксис,
которым она управляет.
Вложенность повторяет то же правило внутри себя
Сначала вычисляется внутреннее выражение, а на его месте остаётся полученное значение.
(+ 10 (* 2 3))Читайте изнутри наружу. Умножьте два на три, получится шесть. Затем сложите десять и шесть, получится шестнадцать.
Вот почему скобки только сначала кажутся тяжёлыми, а со временем становятся лёгкими. Не нужно помнить приоритет и гадать, выполняется ли умножение раньше сложения. Сама форма скобок каждый раз однозначно задаёт порядок.
Что вы теперь можете прочитать
Посмотрите на это и, не зная, что делает каждое из этих имён, скажите, что к чему применяется.
(define (price-with-fee price fee)
(+ price fee))Внешняя форма здесь define, особая форма, а не вызов процедуры. Её первая
часть, (price-with-fee price fee), содержит определяемое имя вместе с именами,
которые ожидает процедура. Вторая часть содержит тело. Тело (+ price fee)
является обычным вызовом и складывает эти два значения.
Вы только что разделили определение на осмысленные части, ещё не изучив все
детали define. В этом и состоит выигрыш небольшой формы, которая повторяется
снова и снова.
Попробуйте сами
Прочитайте это выражение и предскажите значение до запуска.
(+ 1 (* 2 (+ 3 4)))Показать ответ
Пятнадцать. Сначала вычисляем самое внутреннее выражение, складываем три и четыре, получается семь. Затем умножаем два на семь, получается четырнадцать. Затем прибавляем один, получается пятнадцать. В рассуждениях не потребовался приоритет операторов, потому что порядок задали скобки.
Готовы двигаться дальше?
Вы можете взглянуть на незнакомое выражение, указать на первый элемент внутри каждой пары скобок и сказать, что к чему применяется, даже когда не знаете, что означают имена.
Переходите к странице Первая программа, где вы сначала запустите эту форму, а затем подробно разберёте её части.