如何在SWI-Prolog中打印一系列术语。
我试过了:
portray_clause([term1, term2]).
但是这只是在一个长流中写出来,一个字符串甚至出现在ascii字符代码列表中 - 我想要打印“abc”。
答案 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.