在黑客clpz在sicstus-prolog的背景下,我想一睹SICStus Prolog生成的warren-abstract-machine代码。例如,让我们剖析以下谓词!
is_list([]).
is_list([_|Es]) :- is_list(Es).
这是我现在正在做的:
将
is_list/1
的 2 个子句拆分成 2 个单独的谓词,并在前面添加 2 个虚拟子句:is_list__clause1(dummy1). % 虚拟子句 is_list__clause1([]). is_list__clause2(dummy2). % 虚拟子句 is_list__clause2([_|Es]) :- is_list(Es).
滥用 SICStus prolog-toplevel,操作如下:
| ?- is_list__clause1(X). X = dummy1 ? t … 0x7eff37281300: GET_NIL_X0 0x7eff37281304: PROCEED 0x7eff37281308: END_OF_CLAUSEQ user:is_list__clause1/1 … | ?- is_list__clause2(X). X = dummy2 ? t … 0x7eff37281150: GET_LIST_X0 0x7eff37281154: U2_VOID_XVAR 1,x(0) 0x7eff37281160: EXECUTEQ user:is_list/1 0x7eff37281170: END_OF_CLAUSEQ user:is_list__clause2/1 …