为L0程序术语生成WAM代码的正确顺序是什么?

时间:2016-10-28 20:01:02

标签: prolog warren-abstract-machine

Hassan Aït-Kaci's "Warren's Abstract Machine: A Tutorial Reconstruction"第2.2节中,编译L0查询的命令足够清楚:寄存器必须使用从左到右的广度优先搜索进行分配,并且必须使用从左到右的后续时间生成代码订购深度优先搜索。

在2.3节中,(L0程序的)寄存器分配顺序是明确的:从左到右的广度优先搜索。代码生成的顺序不是。有了给出的唯一例子,我无法判断是否应该使用BFS或DFS来生成代码。

有人可以给我以下L0程序的WAM代码吗?

P(Q(R(A)),S(B))。

1 个答案:

答案 0 :(得分:2)

我把你的程序放在sample.pl

$ cat sample.pl
p(q(r(a)),s(b)).

使用GNU Prolog,然后我做了:

$ gplc -w sample.pl

以下 WAM 说明随后包含在sample.wbc

clause(p(q(r(a)),s(b)),[
    get_structure(q/1,0),
    unify_structure(r/1),
    unify_atom(a),
    get_structure(s/1,1),
    unify_atom(b),
    proceed]).