4

如何在 SWI-Prolog 中漂亮地打印术语列表。

我努力了:

portray_clause([term1, term2]).

但这只是在一个长流中写出,甚至一个字符串作为 ascii 字符代码列表出现——我希望在其中打印“abc”。

4

2 回答 2

2

这是 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"。

有关更多信息,请参阅此线程

于 2012-04-27T18:16:16.560 回答
0

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

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

?- write(['a','b','c']).
[a,b,c]
true.
于 2012-04-21T20:56:59.247 回答