在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))。
答案 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]).