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

Which is the correct order to generate WAM code for L0 program terms?

Hassan Aït-Kaci's "Warren's Abstract Machine: A Tutorial Reconstruction"2.2节中,L0查询的编译顺序已经很清楚了:寄存器分配必须是从左到右广度优先,代码生成是从左到右post-顺序深度优先搜索。

在2.3节中,(L0程序)寄存器分配的顺序很明确:从左到右的广度优先搜索。代码生成的顺序不是。仅举了一个例子,我不知道该用BFS还是DFS来生成代码。

谁能给我以下L0程序的WAM代码?

p(q(r(a)),s(b)).

我把你的程序放在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]).