自动拆分与概率网络编程技术探索
1. 混合阶段映射组合器
在 λ12 这种 lambda 演算中,其优势之一在于能将组合器表示为高阶函数。以 tmap 组合器为例,它可将类型为 ∇list ˚ ⃝int Ñ ⃝int 的函数转换为类型为 ∇list ˚ ⃝list2 Ñ ⃝list2 的函数,具体是通过对第二个参数进行映射实现的。以下是相关代码:
@next{ datatype list2 = Empty2 | Cons2 of int * list2 }
fun tmap (f : ∇list * ⃝int -> ⃝int) (l : ∇list, q : ⃝list2) =
next{ let fun m Empty2
= Empty2
| m (Cons2(h,t)) = Cons2(prev{f (l,next{h})}, m t)
in m prev{q}}
val mapqss = tmap qss
tmap f 会执行一次 f 的第一阶段部分,而多次执行 f 的第二阶段部分。从拆分输出能更清晰地看到这一点:
fun tmap1 f = (fn (l,()) => ((),#2 (f (l,()))),())
val (mapqss1,()) = tmap1 qs1
datatype list2 = Empty2 | Cons2 of int * list2
fun tmap2 (f,()) ((l,q), p : tree) =
let fun m Empty2 = Empty2
| m (Cons2(h,t)) = Cons2(f ((l,h), p), m t)
in m q
val mapq
超级会员免费看
订阅专栏 解锁全文

697

被折叠的 条评论
为什么被折叠?



