3

使用しているときに、プロローグの csymf と csym の違いは何ですか?

?-code_type(X,csym).

X = 48 ;
X = 49 ;
....

?-code_type(X,csymf).

X = 65;
X = 66;
....

Xが正確に何であるべきか誰か教えてください。この部分でSWI-prologのマニュアルを読んだところ、

csym :Char is a letter (upper- or lowercase), digit or the underscore (_). These are valid C and Prolog symbol characters.

csymf :Char is a letter (upper- or lowercase) or the underscore (_). These are valid first characters for C and Prolog symbols.

では、いくつかの例を教えてください。

ありがとう

4

1 に答える 1

2

code_type(Code, Type) が acharacter codeと his の間の関係を保持していることを示す、関連する説明を既に見つけていclassificationます。

Prolog のシンボルは C (または Java) のシンボルとは異なるため、マニュアルは少し誤解を招くと思います。[_a-zA-Z][_a-zA-Z0-9]*これらの後者は、引用した読み取り可能な説明と同等の のような正規表現で説明できます。

c9は有効な C 記号ですが、そうで9cはありません (数字で記号を開始することはできません)。

文字のすべての「プロパティ」を検査するには (文字コード (整数) とエンコードされた文字 (ローカライズ) の違いを認識していると思います)、次を使用できます。

?- char_type(v,T).
T = alnum ;
T = alpha ;
T = csym ;
T = csymf ;
T = ascii ;
T = graph ;
T = lower ;
T = lower('V') ;
T = to_lower('V') ;
T = to_upper(v) ;
false.

その後v、を開始できC symbolます。

?- char_type('7',T).
T = alnum ;
T = csym ;
T = ascii ;
T = digit ;
T = graph ;
T = to_lower('7') ;
T = to_upper('7') ;
T = digit(7) ;
T = xdigit(7).

ここで失敗csymfすると、 を7開始できませんC symbol

を開始できるすべての文字を取得するにはC symbol、次を使用できます

?- forall(char_type(X,csymf),write(X)).
ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzªµºÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
true.

ロケールによっては、結果が私の結果と異なる可能性があると思います。

于 2013-01-03T06:49:36.210 に答える