簡體   English   中英

Prolog中的'和'有什么區別?

[英]What is the difference between ' and " in Prolog?

我是 Prolog 的新手,注意到 ' 和 " 給出不同的行為,但很好奇為什么。具體來說,在加載文件時, ?- ['test1.pl'].有效,而?- ["test1.pl"].沒有。

單引號項目始終是原子。

雙引號的含義取決於 Prolog 標志double_quotes


atom — 具有此值"a" = a 如今,這很少使用。 但是你會發現寫有["abc.pl"]的 Prolog 書籍。


codes — 字符代碼列表。 這通常是默認設置,但它會導致非常難以理解的答案,例如

?- set_prolog_flag(double_quotes,codes).
true.

?- phrase(("Ja tvoi ",("sluga"|"rabotnik"),"!"), Satz).
Satz = [74,97,32,116,118,111,105,32,115,108,117,103,97,33] ;
Satz = [74,97,32,116,118,111,105,32,114,97,98,111,116,110,105,107,33].

更糟糕的是,如果您使用 ASCII 以外的字符:

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

chars — 單字符原子列表。 有關更多信息,請參閱此內容。

?- set_prolog_flag(double_quotes,chars).
true.

?- 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 = ['Я',' ',т,в,о,й,' ',р,а,б,о,т,н,и,к,!].

這種表示法給出了更易讀的答案,並且是ScryerTauTreallaIchiban中的默認值。 Scryer 和 Trealla 使用雙引號表示法更緊湊地顯示它們,以打印任何單字符原子列表。 對於SICStusSWI ,可以使用以下庫進行模擬。

?- use_module(library(double_quotes)).
true.

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

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

如果您在將double_quotes.pl作為庫安裝時遇到困難,只需將其放入其他 Prolog 文件的目錄中並說: use_module(double_quotes).

Prolog 中的字符串用單引號書寫。 用雙引號寫的術語會立即轉換為字符代碼列表。

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

?- write("sdf").
[115, 100, 102]
true.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM