Замыкания
Способ определения fun позволяет функциям в Egg замыкаться вокруг окружения, и использовать локальные переменные в теле функции, которые видны во время определения, точно как в функциях JavaScript.
Следующая программа иллюстрирует это: функция f возвращает функцию, добавляющую её аргумент к аргументу f, то есть, ей нужен доступ к локальной области видимости внутри f для использования переменной a.
run("do(define(f, fun(a, fun(b, +(a, b)))),",
" print(f(4)(5)))");
// ? 9
Объясните, используя определение формы fun, какой механизм позволяет этой конструкции работать.