我正在编写一个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.
是否有其他方法可以获取用户定义谓词的源代码?
答案 0 :(得分:2)
您的意思是获得与listing / 1生成的源代码相同的源代码吗?如果是这种情况,您只需将listing / 1与with_output_to / 2结合使用:
with_output_to(atom(SourceCode), listing(quadratic_formula)).