230
社区成员




感谢宏波老师的精彩讲座!在第 1 次讲座演示文档 slides1 的第 20 页
给出的这个语言的求值过程,这个算是 Applicative 的?还是 Concatenative 的?Applicative 和 Concatenative 应该是一种对偶关系,两者的转化和 Donaghy transformation 有关系。但是怎么展开论述这个,我还没有完全想清楚。
Donaghy transformation 的定义有多种,我用最直观的方式引入。
上图定义了一个右转映射,可以把一个平面树映射为一个二叉树。类似有如下的左转映射
这样,通过右转和左转,我们把两个二叉树通过一个平面树联系起来。
这种二叉树之间的映射就是 Donaghy transformation。而我们知道二叉树和 LISP 的实现、表达式估值密切相关。这两个对偶的树分别代表 applicative 和 concatenative。
applicative 和 concatenative 一个是时间占优,一个是空间占优,我理解在机器学习、云计算的角度都会找到非常底层的应用。
补充一下 这里的eval 是个尾递归函数,所以本质上是一个while loop.
第一个eval 是递归调用,通过lowering, 后续解释执行就不需要递归了(隐式的消耗宿主语言的栈)