программа на прологе, чтобы проверить, является ли данный ввод цифрой, прописными или строчными буквами

Я использовал следующую логику для вышеуказанной программы, но она выдает ошибку, показывающую >=/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').

Спасибо


person raj    schedule 15.11.2012    source источник


Ответы (1)


Если вы хотите классифицировать только символы ASCII в ISO Prolog, вы можете сделать это различными способами:

Как символы, которые представлены в виде атомов длины 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 . Осторожно, эти вещи все еще развиваются...

Подробнее о символах и кодах см. В чем разница между ' и в Прологе?

person false    schedule 15.11.2012