Предикат, проверяющий введена ли цифра, а не буква - Prolog

Узнай цену своей работы

Формулировка задачи:

Дана программа, переводящая число от 1 до 9 в его словесное обозначение. Помогите написать предикат, проверяющий введена ли цифра, а не буква. При наличие буквы, вывести соответствующее сообщение.

Решение задачи: «Предикат, проверяющий введена ли цифра, а не буква»

textual
Листинг программы
domains
strl=string*
intl=integer*
 
predicates
num2str(strl,strl)
getDig(integer,strl,string)
 
clauses
 
getDig(0,[H|_],H).
getDig(N,[_|T],R) :- N>0, N1=N-1, getDig(N1,T,R).
 
num2str([],[]).
num2str([X|R],[Q|T]) :- X>="0", X<="9", str_int(X,N), 
                                 getDig(N,["Zero","One","Two","Three","Four",
                                          "Five","Six","Seven","Eight","Nine"],Q), num2str(R,T).
num2str([X|R],[Q|T]) :- X < "0", Q="Not a digit!",num2str(R,T).
num2str([X|R],[Q|T]) :- X > "9", Q="Not a digit!",num2str(R,T).

Объяснение кода листинга программы

  1. В коде определены два домена: strl (строка символов) и intl (целое число).
  2. Также в коде определены два предиката: num2str и getDig.
  3. Предикат getDig преобразует целое число в строку, используя список строк с наименованиями цифр от 0 до 9.
  4. Предикат num2str преобразует строку символов в строку цифр, используя предикат getDig.
  5. В первой клаузе предиката getDig, если входной список пуст, то возвращается пустая строка.
  6. Во второй клаузе предиката getDig, если входной список не пуст, то из него удаляется первый элемент и преобразуется в строку цифр, после чего вызывается рекурсивно предикат getDig для оставшейся части списка.
  7. В первой клаузе предиката num2str, если входной список пуст, то возвращается пустая строка.
  8. Во второй клаузе предиката num2str, если первый элемент входного списка является цифрой от 0 до 9, то он преобразуется в целое число, вызывается рекурсивно предикат getDig для оставшейся части списка и в конце возвращается результат.
  9. Если первый элемент входного списка не является цифрой от 0 до 9, то возвращается сообщение Not a digit!.

Оцени полезность:

7   голосов , оценка 4.286 из 5
Похожие ответы