12 локальные переменные (продолжение)
Продолжаем неустанно совершенствоваться в Scheme. Вы уже
видели в предыдущий раз, что локальные переменные можно
объявлять в теле функции, пользуясь тем же самым define
Однако есть ещё несколько интересных и полезных приёмов работы.
Воспользуемся тем, что параметры функции по сути те же
локальные переменные.
Тогда пример выше, можно было бы сделать следующим образом:
Попробуем понять что же произошло. Мы создали функцию
с параметром, который назвали 'a', поместили в неё всё
что нам необходимо, и после этого запустили её придав
параметру требуемое значение '5'. Всё, как говорится, гениально
и просто.
Попробуем ещё, вместо:
мы можем написать:
Данный приём настолько популярен, что имеет общепринятое сокращение – let.
Приведённые выражения в сокращённом виде записываются так:
Если немного поразмышлять, то мы получили не просто способ
объявления локальных переменных, а возможность делать блоки
с локальными переменными в произвольном месте кода, например:
У этого приёма есть один существенный недостаток, поскольку
формальные параметры инициализируются независимо друг от друга
и в неопределённом порядке, мы не можем использовать одни
из них для инициализации других, например в примере
с двумя параметрами нельзя у задать равным x.
Но против лома всегда есть другой лом.
Применим одну маленькую хитрость – будем связывать переменные по очереди:
Тогда всё получится, на момент определения 'y', 'x' уже известен и проинициализирован.
Этот приём тоже очень распространён, а потому тоже имеет общепринятое сокращение – let*.