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)

?- use_module(ライブラリ(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 に答える