访问序言中的程序列表
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).
...
我在 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).
...