如何在 SWI-Prolog 中漂亮地打印术语列表。
我努力了:
portray_clause([term1, term2]).
但这只是在一个长流中写出,甚至一个字符串作为 ascii 字符代码列表出现——我希望在其中打印“abc”。
如何在 SWI-Prolog 中漂亮地打印术语列表。
我努力了:
portray_clause([term1, term2]).
但这只是在一个长流中写出,甚至一个字符串作为 ascii 字符代码列表出现——我希望在其中打印“abc”。
这是 SWI 中经常出现的问题。默认情况下,“abc”是字符代码列表,因此打印为:
?- Xs = "abc"。 Xs = [97, 98, 99]。
这可以轻松转换回来吗?想象一下,您有一个距离列表,恰好是 97、98 和 99。在这种情况下,字符串作为答案会非常容易产生误导。因此,您的问题没有干净的解决方案,只要字符串表示法表示字符列表代码!
您可以将“abc”的含义切换为长度为 1 的原子的字符列表:
?- set_prolog_flag(double_quotes,chars)。 真的。 ?- Xs = "abc"。 Xs = [a, b, c]。
如果您对它感到满意,您可以使用library(double_quotes)
.
?-使用模块(库(双引号))。 真的。 ?- Xs = "abc"。 Xs = "abc"。
有关更多信息,请参阅此线程。
这是一个提示..查找字符串和原子之间的区别..如果您想将它们分开分析字符串的单个字符,您可能只需要将它们保存为字符串。使用 nth0 或 nth1。否则,原子对于大多数事情都可以正常工作/可以轻松操作。
?- write(["a", "b", "c"]).
[[97],[98],[99]]
true.
?- write(['a','b','c']).
[a,b,c]
true.