我正在为一个需要足够丰富以支持高阶函数的语言片段开发一个元解释器,并且遇到了闭包的问题。
具体来说,我需要所有的值都可以表示为有限项;没有无限的重复,没有对象相互指向。这对于大多数类型的值、数字、有限列表、映射、表示程序代码的抽象语法树来说都很好。问题是闭包;它们包含对其包含环境的引用,但是如果闭包存储在局部变量中,那么包含环境也包含对闭包的引用。如果您使用可变指针,这是很好的,但是如果您尝试使用有限项,则这是无限重复。
是否有已知的将闭包表示为有限项的技术,或者我忽略了一些绕过问题的技术?
发布于 2021-07-03 04:15:22
当我编写一种使用引用计数GC的函数式语言时,我曾经遇到过类似的问题,因此必须避免任何循环引用。
我的解决方案是,环境实际上没有包含指向闭包的指针。相反,它存储一个函数,当您将一个指向环境的指针传递给它时,该函数将产生闭包。
从环境中查找值的过程将包括在必要时调用该函数以生成闭包。当然,该函数不需要指向环境的循环指针,因为环境将被传递进来。
这个技巧基本上是按照Y组合器用来生成递归函数的方式来构造递归数据结构。
https://stackoverflow.com/questions/68214182
复制相似问题