宏反向展开重构:宏化算法详解
1. 宏展开示例
首先来看一个宏展开的简单示例,以 unless 宏为例:
macro
unless {
rule { $x $y } => { if (! $x) $y }
}
unless (success) fail ();
expandΣ (unless · (success) fail();)
→ match (x · y, (success) fail(); , ∅)
→ match (y, fail();, [x →(success)])
→ match (ϵ, ;, [x →(success), y →fail()])
→ transcribe ( if ( ! x) · y, [x →(success), y →fail()])
→ if (!(success)) fail();
这里展示了 unless 宏的详细展开过程,涉及到 match 和 transcribe 操作。其中, match 函数用于模式匹配, transcribe 函数用于根据匹配结果进行模板转录。其函数定义如下:
- match : p × s × Θ →(Θ, s)
- transcribe : t × Θ →s
超级会员免费看
订阅专栏 解锁全文
1038

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



