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)
。
?- use_module(ライブラリ(double_quotes))。 真実。 ?- Xs = "abc". Xs = "abc".
詳細については、このスレッドを参照してください。
ここにヒントがあります..文字列とアトムの違いを調べてください..文字列を引き離して文字列の個々の文字を分析したい場合は、おそらく文字列として保持する必要があるだけです。nth0 または nth1 を使用します。それ以外の場合、アトムはほとんどの場合に問題なく機能し、簡単に操作できます。
?- write(["a", "b", "c"]).
[[97],[98],[99]]
true.
?- write(['a','b','c']).
[a,b,c]
true.