prolog程序,用于检查给定输入是数字还是大写或小写

时间:2012-11-15 22:49:50

标签: prolog swi-prolog iso-prolog

我在上面的程序中使用了以下逻辑,但它显示错误显示>=/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').

由于

1 个答案:

答案 0 :(得分:1)

如果您只想对ISO Prolog中的ASCII字符进行分类,可以通过多种方式进行分类:

字符,表示为长度为1的原子。要比较它们,您可以使用通用术语比较(@>=)/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。请注意,这些事情仍在不断发展......

有关字符和代码的更多信息,请参阅 What is the difference between ' and " in Prolog?