SWI-Prologで用語のリストを印刷するにはどうすればよいですか?プロローグ用語をきれいに印刷
portray_clause([term1, term2]).
が、それはただ長いストリームに書き出すと、文字列もASCII文字コードのリストとして出てくる - 私はあることを「ABC」を希望:
私が試してみました印刷されます。
SWI-Prologで用語のリストを印刷するにはどうすればよいですか?プロローグ用語をきれいに印刷
portray_clause([term1, term2]).
が、それはただ長いストリームに書き出すと、文字列もASCII文字コードのリストとして出てくる - 私はあることを「ABC」を希望:
私が試してみました印刷されます。
これはヒントです。文字列と原子の違いを調べます。たとえば、文字列の個々の文字を解析する場合は、文字列として保持する必要があります。 nth0またはnth1を使用します。さもなければ、原子はほとんどの事に対してうまく働く/簡単に操作できる。
?- write(["a", "b", "c"]).
[[97],[98],[99]]
true.
?- write(['a','b','c']).
[a,b,c]
true.
これはSWIで頻繁に発生する問題です。デフォルトの「ABC」とは、文字コードのリストであるので、それは次のように印刷されています。これは、バックやすい
?- Xs = "abc". Xs = [97, 98, 99].
を変換することができますか。 がとなる距離のリストが97,98、および99であるとします。この場合、文字列は非常に誤解を招く可能性があります。したがって、文字列表記が文字コードのリストを意味する限り、あなたの問題にはきれいな解決策はありません!
あなたは長さ1の原子である文字のリストに「ABC」の意味を切り替えることができます:あなたはそれに満足している場合は、library(double_quotes)
を使用することができます
?- set_prolog_flag(double_quotes,chars). true. ?- Xs = "abc". Xs = [a, b, c].
。
?- use_module(library(double_quotes)). true. ?- Xs = "abc". Xs = "abc".
詳細については、this threadを参照してください。
これは文字列を印刷するのに最適な答えですが、ポートレイ句はまだ用語を印刷していないため、答えとしてマークしていませんそれらの文字列がはるかに優れている場合でも。 – codeshot
(最初のリストには文字列、2番目のアトムが含まれているはずです) – magus