2016-03-03 100 views
1

請幫我簡單的問題!如何在屏幕上打印未綁定的變量? Prolog

我想將未綁定變量的列表打印到屏幕上。

12 ?- write([X, Y]). 

[_G1696,_G1699] 

但我想看到的事實[X,Y]屏幕,而不是[_G1696,_G1699]上。可能嗎?怎麼樣?請幫助任何人

+1

見[此答案](http://stackoverflow.com/a/7948525/772868)如何編寫和以一般方式讀變量名。 – false

+1

'write_term([X,Y],[variable_names(['X'= X,'Y'= Y])])。' – false

+0

非常感謝! – Svetlana

回答

0

我假設你想漂亮的打印條款與未綁定的變量?您可以使用事實上的標準numbervars/3謂詞來完成它。例如:

pretty_print_term(Stream, Term) :- 
    \+ \+ (
     numbervars(Term, 0, _), 
     write_term(Stream, Term, [numbervars(true)])). 

pretty_print_term_quoted(Stream, Term) :- 
    \+ \+ (
     numbervars(Term, 0, _), 
     write_term(Stream, Term, [numbervars(true), quoted(true)])). 

在這些片段,雙重否定用來打印出更漂亮的一個術語,而由numbervars/3謂詞丟棄變量的實例。

的使用例:

?- current_output(Stream), pretty_print_term_quoted(Stream, [X, Y]). 
[A,B] 
Stream = <stream>(0x10bebcf18). 
+0

謝謝!但我不能強迫numbervars/3選擇相同的變量名稱? (完全是X,Y而不是A,B) – Svetlana

+0

@Svetlana你不能用'numbervars/3'來做到這一點。 –