在Prolog中打印谓词的源代码

时间:2017-10-04 03:49:33

标签: swi-prolog

我正在编写一个Prolog元解释器,需要获取我定义的谓词的源代码。我认为这可以使用expand_term/2,但它返回了一个递归数据结构而不是谓词的源代码:

:- initialization(main).

main :- expand_term(quadratic_formula(X,A,B,C) :- Z,Z),writeln(Z).
%This prints @(S_1,[S_1=(quadratic_formula(_3068,_3090,_3112,_3134):-S_1)]) instead of the predicate's source code.

quadratic_formula(X,A,B,C) :- 
    X is -B + sqrt(B*B-4*A*C)/2*A;
    X is -B - sqrt(B*B-4*A*C)/2*A.

是否有其他方法可以获取用户定义谓词的源代码?

1 个答案:

答案 0 :(得分:2)

您的意思是获得与listing / 1生成的源代码相同的源代码吗?如果是这种情况,您只需将listing / 1与with_output_to / 2结合使用:

 with_output_to(atom(SourceCode), listing(quadratic_formula)).