Результат: найти ведущую форму в выражении со скобками, отделить её от следующих частей и понять, является ли выражение обычным вызовом или особой формой.
Что нужно знать: ничего. Эта страница для читателя, который никогда не писал программ, и для читателя, который написал их много, но которого оттолкнули скобки.
Одна основная форма используется снова и снова
У большинства языков большой синтаксис. Есть вызовы функций, операторы с приоритетом, инструкции, блоки, и у каждого своя форма, которую нужно запомнить.
Этот язык снова и снова использует одну основную форму.
(действие вход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)))Показать ответ
Пятнадцать. Сначала самое внутреннее: сложить три и четыре — получится семь. Затем умножить два на семь — получится четырнадцать. Затем прибавить один — получится пятнадцать. Приоритет операторов ни разу не участвовал в рассуждении, потому что порядок задали скобки.
Готовы двигаться дальше?
Вы можете посмотреть на незнакомое выражение, указать на первый элемент внутри каждой пары скобок и сказать, что к чему применяется, даже когда не знаете, что означают имена.
Далее: Первая программа — там вы сначала запустите эту форму, а затем подробно разберёте её части.