在prolog中访问程序列表

在prolog中访问程序列表,prolog,Prolog,我在SWI Prolog中定义变量时遇到了一些奇怪(或者不是很奇怪)的问题。例如: 我想做如下事情: :- initialization(main). main :- X = listing(main), write(X). 但它只是简单地打印“listing(main)”您正在使用X=listing(…)创建一个术语,稍后您将使用write打印该术语 您似乎想访问main的代码。您正在寻找的是: 条款(:头、体) 如果Head可以与子句Head统一,Body可以与相应的子句Body统一,

我在SWI Prolog中定义变量时遇到了一些奇怪(或者不是很奇怪)的问题。例如:

我想做如下事情:

:- initialization(main).

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

但它只是简单地打印“listing(main)”

您正在使用
X=listing(…)
创建一个术语,稍后您将使用write打印该术语

您似乎想访问main的代码。您正在寻找的是:

条款(:头、体)

如果Head可以与子句Head统一,Body可以与相应的子句Body统一,则为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).
...

需要截图吗?编辑:哦,我忘了加写(X)。:pmain:-X=列表(主)。看,这很酷,但对我没有帮助。。只需要将代码列表(main)的结果存储到变量X中。现在X包含了输出。我仍然无法理解您想要什么。