有没有办法让portray_clause写入变量而不是标准输出?portray_clause变量在Prolog
?- portray_clause(f(x):app(X, Y, Z)).
f(x):app(_, _, _).
true.
?- portray_clause(Output, f(x):-app(X, Y, Z)).
ERROR: Arguments are not sufficiently instantiated
预先感谢您
有没有办法让portray_clause写入变量而不是标准输出?portray_clause变量在Prolog
?- portray_clause(f(x):app(X, Y, Z)).
f(x):app(_, _, _).
true.
?- portray_clause(Output, f(x):-app(X, Y, Z)).
ERROR: Arguments are not sufficiently instantiated
预先感谢您
如果您正在使用SWI-Prolog的,你可以使用with_output_to/2
。例如,要写一个原子,你会说:
?- with_output_to(atom(A), portray_clause(foo(X) :- bar)).
A = 'foo(_) :-\n\tbar.\n'.
非常感谢! –
@MatthiasVanEeghem您应该标记您的问题[swi-prolog],因为这是SWI-Prolog扩展。 – 2013-12-14 17:44:35
好的,会做:) –
你需要实现什么?打印到另一个流(与标准输出不同)或存储表示子句的结构? – rano
我需要存储一个表示portray_clause的“漂亮的输出”的结构。因此,如果它打印“f(x):app(_,_,_)”。我需要Ouput = f(x):app(_,_,_)。 –
Prolog是homoiconic,如果您可以将您的子句传递给portray_clause谓词,则可以将其存储在其他位置 – rano