当我使用时,我很困惑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.
那么请你提供一些例子吗?
由于
答案 0 :(得分:2)
您已经找到相关说明,说明code_type(代码,类型)包含character code
和他的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.
我认为您的结果可能与我的不同,具体取决于您的语言区域。