我想定义一个取消绑定变量最接近绑定的unbind-var函数。
例如
({let {[x 2]}
{let {[x 3]}
{let {[z 3]}
{+ x {unbind-var x {+ x z}}}}}})
将返回3 + 2 + 3 = 8(它使用unbind-var形式中x的第一个值)。 可以有任意的嵌套。
似乎唯一的策略是从unbind-var x返回,直到我们找到x的第二个let。即不知何故,我必须将整个表达式转换为一个列表,然后用car / first和cdr / rest选择片段?