Prolog の ' と " の違いは何ですか? 質問する

Prolog の ' と

私は Prolog を初めて使用していますが、' と " の動作が異なることに気づきましたが、その理由が気になっています。具体的には、ファイルをロードするときに、は?- ['test1.pl'].機能しますが、は?- ["test1.pl"].機能しません。

ベストアンサー1

一重引用符で囲まれた項目は常にアトムです。

二重引用符の意味はPrologフラグによって異なりますdouble_quotes


atom— をこの値で表します"a" = a。現在では、これはめったに使用されません。しかし、Prolog の本には と書かれていることがあります["abc.pl"]


codes— 文字コードのリスト。古いシステムではこれがデフォルトになっていることが多いのですが、次のような非常に読みにくい結果になります。

?-set_prolog_flag(double_quotes,codes) を設定します。
   真実。
?-phrase(("Ja tvoi ",("sluga"|"rabotnik"),"!"), Satz)。
   サッツ = [74,97,32,116,118,111,105,32,115,108,117,103,97,33]
;サッツ = [74,97,32,116,118,111,105,32,114,97,98,111,116,110,105,107,33]。

さらに悪いことに、ASCII 以外の文字を使用すると次のようになります。

?-phrase(("Я твой ",("слуга"|"работник"),"!"), Satz).
   サッツ = [1071,32,1090,1074,1086,1081,32,1089,1083,1091,1075,1072,33]
;サッツ = [1071,32,1090,1074,1086,1081,32,1088,1072,1073,1086,1090,1085,1080,1082,33]。

chars— 1 文字のアトムのリスト。これを見て詳細については、こちらをご覧ください。

?-set_prolog_flag(二重引用符、文字)。
   真実。
?-phrase(("Ja tvoi ",("sluga"|"rabotnik"),"!"), Satz)。
   Satz = ['J'、a、' '、t、v、o、i、' '、s、l、u​​、g、a、!]
; Satz = ['J',a,' ',t,v,o,i,' ',r,a,b,o,t,n,i,k,!]。
?-phrase(("Я твой ",("слуга"|"работник"),"!"), Satz).
   Satz = ['Я',' ',т,в,о,й,' ',с,л,у,г,а,!]
; Satz = ['Я',' ',т,в,о,й,' ',р,а,б,о,т,н,и,к,!]。

この表記法はより読みやすい回答を提供し、スクライアタウトレラ、 そして一番ScryerとTriallaは、1文字のアトムのリストをダブルクォート表記でさらにコンパクトに表示します。SICStusそしてスイスこれは次のライブラリでエミュレートできます。

?-use_module(library(double_quotes)) を使用します。
   真実。
?-phrase(("Ja tvoi ",("sluga"|"rabotnik"),"!"), Satz)。
   Satz = 「私は死んだ!」
; Satz = 「Ja tvoi rabotnik!」
?-phrase(("Я твой ",("слуга"|"работник"),"!"), Satz).
   Satz = 「私はこれが好きです!」
; Satz = 「これは仕事だ!」

double_quotes.plライブラリとしてインストールするのが難しい場合は、他の Prolog ファイルのディレクトリに配置して、次のように記述します。use_module(double_quotes).

おすすめ記事