2015-12-08 3 views
0

portray_clause печатает каждый атом на новой строке. Например:Prolog: как portray_clause без новых строк

?- portray_clause((p(X):-q(X),r(X))). 
p(A) :- 
    q(A), 
    r(A). 

Есть ли простой способ распечатать предложение на одной строке?

У меня есть следующее решение, но оно неэлегантно и работает только с прологом SWI, а не с YAP.

with_output_to(atom(A), portray_clause((Head:-Body))), 
split_string(A, "\n", '', Words), 
atomic_list_concat(Words,'',Out), 
writeln(Out). 
+1

вы можете использовать writeq (T) или формат ('~ д ~ п', [T]) – CapelliC

+0

Точка 'portray_clause/1 'is to pretty-print the clause. Для чего вам это нужно? Если у вас есть предложение, вы можете просто распечатать его с использованием любого предиката для (форматированного) письма, как это предлагает @CapelliC. –

+0

Мой вопрос был неточным. Я хотел бы дать именам переменных лучше, чем _G3882, _G3883 и т. Д. –

ответ

0

Это может быть сделано следующим образом:

numbervars(Clause,0,_), 
format('~q.~n', [Clause]). 
Смежные вопросы