51

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

4

2 に答える 2

47

一重引用符は常にアトムです。

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


atom— この値で"a" = a. 現在、これはめったに使用されません。しかし、書かれているプロローグの本を見つけることができます["abc.pl"]


codes— 文字コードのリスト。これは多くの場合デフォルトですが、次のような非常に読みにくい回答につながります

?- set_prolog_flag(double_quotes,codes)。
真実。

?-句(("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 以外の文字を使用すると、次のようになります。

?-句(("Я твой ",("слуга"|"работник"),"!"), Satz)。
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(double_quotes,chars)。
真実。

?-句(("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,!].

?-句(("Я твой ",("слуга"|"работник"),"!"), Satz)。
Satz = ['Я',' ',т,в,о,й,' ',с,л,у,г,а,!] ;
Satz = ['Я',' ',т,в,о,й,' ',р,а,б,о,т,н,и,к,!].

この表記はより読みやすい回答を提供し、ScryerTreallaではデフォルトであり、1 文字のアトムのリストを出力するための二重引用符表記を使用して、さらにコンパクトに表示します。SICStusSWIの場合、これは次のライブラリでエミュレートできます。

?- use_module(ライブラリ(double_quotes))。
真実。

?-句(("Ja tvoi ",("sluga"|"rabotnik"),"!"), Satz)。
Satz = "Ja tvoi sluga!" ;
Satz = "Ja tvoi rabotnik!".

?-句(("Я твой ",("слуга"|"работник"),"!"), Satz)。
Satz = "Я твой слуга!" ;
Satz = "Я твой работник!".

ライブラリとしてインストールするのが難しい場合はdouble_quotes.pl、それを他の Prolog ファイルのディレクトリに置き、次のように言ってください。use_module(double_quotes).

于 2011-11-25T13:33:00.203 に答える
10

Prolog の文字列はシングル クォーテーションで囲みます。二重引用符で囲まれた用語は、すぐに文字コードのリストに変換されます。

?- write('sdf').
sdf
true.

?- write("sdf").
[115, 100, 102]
true.
于 2011-11-25T04:18:10.030 に答える