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

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

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

Дана программа, переводящая число от 1 до 9 в его словесное обозначение. Помогите написать предикат, проверяющий введена ли цифра, а не буква. При наличие буквы, вывести соответствующее сообщение.
Листинг программы
  1. domains
  2. int=integer
  3. i=int*
  4. s=string*
  5. predicates
  6. arab(int,string)
  7. numtostr(i,s)
  8. d(i,string,i)
  9. wwod(i,i)
  10. w(i)
  11. pp(i,i,i)
  12. clauses
  13. pp([],Y,Y).
  14. pp([X1|X],Y,Y2):-Y1=[X1|Y],pp(X,Y1,Y2).
  15. w([]):-nl.
  16. w([X|X1]):-write(X," "),w(X1).
  17. d(X,S,X1):-str_int(S,Z),!,X1=[Z|X].
  18. d(X,_,X).
  19. wwod(X,X2):-write("Vvedite X= "),readln(S),S<>"",!,D(X,S,X1),wwod(X1,X2).
  20. wwod(X,X1):-pp(X,[],X1).
  21. arab(0,"Nol").
  22. arab(1,"Odin").
  23. arab(2,"Dva").
  24. arab(3,"Tri").
  25. arab(4,"Chetire").
  26. arab(5,"Pyat").
  27. arab(6,"&#152;Shest").
  28. arab(7,"Sem").
  29. arab(8,"Vosem").
  30. arab(9,"Devyat").
  31. numtostr([],[]).
  32. numtostr([X|Xt],[S|St]):-arab(X,S),numtostr(Xt,St).
  33. goal
  34. wwod([],X),
  35. write("Ishodniy spisok:"), w(X),
  36. numtostr(X,S), write("Preobrazovanniy spisok:",S).

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

textual
Листинг программы
  1. domains
  2. strl=string*
  3. intl=integer*
  4.  
  5. predicates
  6. num2str(strl,strl)
  7. getDig(integer,strl,string)
  8.  
  9. clauses
  10.  
  11. getDig(0,[H|_],H).
  12. getDig(N,[_|T],R) :- N>0, N1=N-1, getDig(N1,T,R).
  13.  
  14. num2str([],[]).
  15. num2str([X|R],[Q|T]) :- X>="0", X<="9", str_int(X,N),
  16.                                  getDig(N,["Zero","One","Two","Three","Four",
  17.                                           "Five","Six","Seven","Eight","Nine"],Q), num2str(R,T).
  18. num2str([X|R],[Q|T]) :- X < "0", Q="Not a digit!",num2str(R,T).
  19. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы