Судя по вашим комментариям, создается впечатление, что вы реализуете ленивый язык, в котором среда содержит обещания, а при оценке обещания вы должны изменить среду, чтобы она содержала новое значение.
Моя рекомендация: разработайте пару вспомогательных функций.Во-первых: функция, которая принимает символ, представляющий имя переменной и среду, и возвращает значение этой переменной с побочным эффектом изменения среды для размещения обновленной привязки .В рамках этого вам, вероятно, понадобится другая вспомогательная функция, которая принимает одну привязку, оценивает ее правую часть, а затем изменяет ее, чтобы содержать новое значение.
Обязательно ТЕСТ эти вспомогательные функции полностью.