解释器实现和 Applicative、Concatenative ?

Mountain 2022-10-15 11:51:36

感谢宏波老师的精彩讲座!在第 1 次讲座演示文档 slides1 的第 20 页

 给出的这个语言的求值过程,这个算是 Applicative 的?还是 Concatenative 的?Applicative 和 Concatenative 应该是一种对偶关系,两者的转化和 Donaghy transformation 有关系。但是怎么展开论述这个,我还没有完全想清楚。


 

...全文
396 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mountain 2022-10-15
  • 打赏
  • 举报
回复 2

Donaghy transformation 的定义有多种,我用最直观的方式引入。

img

上图定义了一个右转映射,可以把一个平面树映射为一个二叉树。类似有如下的左转映射

img

这样,通过右转和左转,我们把两个二叉树通过一个平面树联系起来。

img

这种二叉树之间的映射就是 Donaghy transformation。而我们知道二叉树和 LISP 的实现、表达式估值密切相关。这两个对偶的树分别代表 applicative 和 concatenative。

applicative 和 concatenative 一个是时间占优,一个是空间占优,我理解在机器学习、云计算的角度都会找到非常底层的应用。

wi2inq48 2022-10-15
  • 举报
回复
@Mountain 根本是不相关的两种东西,树结构涉及到计算的依赖顺序,这两种变换完全不能保证依赖不变,为什么要强行联系到一起
bobzhang1988 讲师 2022-10-15
  • 打赏
  • 举报
回复 1

补充一下 这里的eval 是个尾递归函数,所以本质上是一个while loop.
第一个eval 是递归调用,通过lowering, 后续解释执行就不需要递归了(隐式的消耗宿主语言的栈)

wi2inq48 2022-10-15
  • 打赏
  • 举报
回复
你的app concat 还有Donaghy transformation 的定义是什么?

230

社区成员

发帖
与我相关
我的任务
社区描述
日程:https://bbs.csdn.net/topics/608593392 主页:https://bobzhang.github.io/courses/ B站: “张宏波的基础软件课程”
rescript开发语言 个人社区 广东省·深圳市
社区管理员
  • raelidea
  • MoonBit月兔
  • 幻灰龙
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧