FreeSource: AltLinux/Sisyphus/Alterator/internals/6

Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.

12 локальные переменные (продолжение)

Продолжаем неустанно совершенствоваться в Scheme. Вы уже видели в предыдущий раз, что локальные переменные можно объявлять в теле функции, пользуясь тем же самым define

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

Тогда пример выше, можно было бы сделать следующим образом:

Попробуем понять что же произошло. Мы создали функцию с параметром, который назвали 'a', поместили в неё всё что нам необходимо, и после этого запустили её придав параметру требуемое значение '5'. Всё, как говорится, гениально и просто.

Попробуем ещё, вместо:

мы можем написать:

Данный приём настолько популярен, что имеет общепринятое сокращение – let.

Приведённые выражения в сокращённом виде записываются так:

Если немного поразмышлять, то мы получили не просто способ объявления локальных переменных, а возможность делать блоки с локальными переменными в произвольном месте кода, например:

У этого приёма есть один существенный недостаток, поскольку формальные параметры инициализируются независимо друг от друга и в неопределённом порядке, мы не можем использовать одни из них для инициализации других, например в примере с двумя параметрами нельзя у задать равным x.

Но против лома всегда есть другой лом.

Применим одну маленькую хитрость – будем связывать переменные по очереди:

Тогда всё получится, на момент определения 'y', 'x' уже известен и проинициализирован.

Этот приём тоже очень распространён, а потому тоже имеет общепринятое сокращение – let*.