漂亮打印一个序言

时间:2012-04-21 19:13:27

标签: prolog pretty-print

如何在SWI-Prolog中打印一系列术语。

我试过了:

portray_clause([term1, term2]).

但是这只是在一个长流中写出来,一个字符串甚至出现在ascii字符代码列表中 - 我想要打印“abc”。

2 个答案:

答案 0 :(得分:3)

这是SWI中的常见问题。默认情况下,“abc”是字符代码列表,因此打印为:

?- Xs = "abc".
Xs = [97, 98, 99].

这可以轻易转换回来吗? 想象一下,你有一个发生的距离列表是97,98和99.在这种情况下,一个字符串作为答案会非常误导。因此,只要字符串符号表示字符列表代码,就没有干净的解决方案!

您可以将“abc”的含义切换为长度为1的原子的字符列表:

?- set_prolog_flag(double_quotes,chars).
true.

?- Xs = "abc".
Xs = [a, b, c].

如果您对此感到满意,可以使用library(double_quotes)

?- use_module(library(double_quotes)).
true.
?- Xs = "abc".
Xs = "abc".

有关详情,请参阅this thread

答案 1 :(得分:1)

这是一个提示..查找字符串和原子之间的区别..如果你想将它们分开来分析字符串的单个字符,你可能只需要将字符串保存为字符串。使用nth0或nth1。否则,原子在大多数情况下都能正常工作/可以轻松操作。

?- write(["a", "b", "c"]).
[[97],[98],[99]]
true.

?- write(['a','b','c']).
[a,b,c]
true.
相关问题