prolog中csymf和csym之间的区别

时间:2013-01-03 00:09:45

标签: prolog swi-prolog

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

那么请你提供一些例子吗?

由于

1 个答案:

答案 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.

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