1

我已经为上述程序使用了以下逻辑,但它给出了错误显示>=/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').

谢谢

4

1 回答 1

1

如果您只想对 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/2code_type/2。请注意,这些事情仍在发展中...

有关字符和代码的更多信息,请参阅 Prolog 中的 ' 和 " 有什么区别?

于 2012-11-15T23:00:19.753 回答