我在上面的程序中使用了以下逻辑,但它显示错误显示>=/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').
由于
答案 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/2
和code_type/2
。请注意,这些事情仍在不断发展......
有关字符和代码的更多信息,请参阅 What is the difference between ' and " in Prolog?