为 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]).
在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]).