2013-12-14 147 views
0

有没有办法让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 

预先感谢您

+0

你需要实现什么?打印到另一个流(与标准输出不同)或存储表示子句的结构? – rano

+0

我需要存储一个表示portray_clause的“漂亮的输出”的结构。因此,如果它打印“f(x):app(_,_,_)”。我需要Ouput = f(x):app(_,_,_)。 –

+0

Prolog是homoiconic,如果您可以将您的子句传递给portray_clause谓词,则可以将其存储在其他位置 – rano

回答

3

如果您正在使用SWI-Prolog的,你可以使用with_output_to/2。例如,要写一个原子,你会说:

?- with_output_to(atom(A), portray_clause(foo(X) :- bar)). 
A = 'foo(_) :-\n\tbar.\n'. 
+0

非常感谢! –

+0

@MatthiasVanEeghem您应该标记您的问题[swi-prolog],因为这是SWI-Prolog扩展。 – 2013-12-14 17:44:35

+0

好的,会做:) –