我已经为上述程序使用了以下逻辑,但它给出了错误显示>=/2: Arithmetic: 'a/0' is not a function
。我应该怎么做才能更正程序?
digit(X):- X>=0,X<10,write('input is digit').
uppercase(X):- X>='A',X<'[',write('input is uppercase').
lowercase(X):- X>='a',X<'{',write('input is lowercase').
谢谢
我已经为上述程序使用了以下逻辑,但它给出了错误显示>=/2: Arithmetic: 'a/0' is not a function
。我应该怎么做才能更正程序?
digit(X):- X>=0,X<10,write('input is digit').
uppercase(X):- X>='A',X<'[',write('input is uppercase').
lowercase(X):- X>='a',X<'{',write('input is lowercase').
谢谢
如果您只想对 ISO Prolog 中的 ASCII 字符进行分类,可以通过多种方式进行:
作为表示为长度为 1 的原子的字符。要比较它们,您可以使用通用术语 compare (@>=)/2
,(@>)/2
...在您的示例中,这将是:
digit_char(X) :- atom_length(X,1), X @>= '0', X @=< '9'.
...
作为表示整理序列整数的纯整数的字符代码(听起来令人印象深刻?它只是 ASCII 代码)。
digit_code(X) :- integer(X), X >= 0'0, X =< 0'9.
...
如果您需要在两者之间进行转换,则有char_code/2
.
对于 Unicode,事情尚未普遍可用并达成一致。在 SWI 中,有char_type/2
和code_type/2
。请注意,这些事情仍在发展中...
有关字符和代码的更多信息,请参阅 Prolog 中的 ' 和 " 有什么区别?