3

当我使用时,我很困惑 prolog 中的 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.

要获取可以开始 a 的所有字符C symbol,您可以使用

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

我认为您的结果可能与我的不同,具体取决于您的语言环境。

于 2013-01-03T06:49:36.210 回答