29、函数式语言中带底值的流处理技术详解

函数式语言中带底值的流处理技术详解

1. amb 运算符的并行执行问题

在处理 IM2 机器的双头流访问时,我们可以使用 amb 运算符来表达这种操作。不过,要实现这个运算符,需要为其两个参数并行执行两个线程。但并行执行是一种较为复杂的机制,实现起来并不容易。

当实现 IM2 机器的双头流访问时,我们通常使用 amb a b where a:b:x = M 这种形式的 amb 运算符。这里的 M 代表一个“生产者进程”,它对 1⊥ - 流进行双头输出访问。关键在于,amb 的两个参数的计算共享同一个可约表达式(redex)M,因此不需要并行计算它们。

如果基于图归约实现一种函数式语言,上述项可以用图 3 所示的方式表示。在这种表示中,代表两个参数的两个项图共享同一个子图作为可约表达式。所以,如果能利用这种共享结构来归约这个项,就有望在顺序计算的范围内实现 1⊥ - 流访问所需的部分 amb 运算符。

2. gamb 运算符的引入与工作原理

2.1 gamb 运算符的定义

为了实现上述目标,我们引入了 gamb 运算符,其类型为 gamb:: Bool -> Bool -> Amb Bool

2.2 gamb 运算符的工作示例

下面以 gtos(stog [0,0..]) 的归约为例,说明 gamb 的工作原理。这里的 gtos 程序经过修改,使用 gamb 运算符代替了 amb。根据 gtos 的定义,gtos 定义中 gamb a b 的求值会产生图 4(A) 所

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值