访问序言中的程序列表

accessing program listing in prolog

我在 SWI-Prolog 中定义变量时遇到了一些奇怪的(或不太奇怪的)问题。示例:

我想做如下事情:

:- initialization(main).

main :- 
X = listing(main),
write(X).

但它只是打印 "listing(main)"

您使用 X = listing(...) 所做的是创建一个 term,稍后您将使用 write 进行打印。

看来你想访问main的代码。你要找的东西是 clause/2:

clause(:Head, ?Body)

True if Head can be unified with a clause head and Body with the corresponding clause body. Gives alternative clauses on backtracking. For facts, Body is unified with the atom true.

示例:

main :- clause(main, X), write(X).

?- main.
clause(main,_G2381),write(_G2381)
true.

也许,使用另一个随意谓词而不是 main/0...

?- with_output_to(atom(X), listing(pattern)), write(X).
gram:pattern(A, B, C) :-
    dig(A, B, C).
gram:pattern(A+C, B, E) :-
    ten(A, B, D),
    dig(C, D, E).
...