Замыкания

Способ определения fun позволяет функциям в Egg замыкаться вокруг окружения, и использовать локальные переменные в теле функции, которые видны во время определения, точно как в функциях JavaScript.

Следующая программа иллюстрирует это: функция f возвращает функцию, добавляющую её аргумент к аргументу f, то есть, ей нужен доступ к локальной области видимости внутри f для использования переменной a.

run("do(define(f, fun(a, fun(b, +(a, b)))),",

    "   print(f(4)(5)))");

// ? 9

Объясните, используя определение формы fun, какой механизм позволяет этой конструкции работать.