Предикат, проверяющий введена ли цифра, а не буква - Prolog
Формулировка задачи:
Дана программа, переводящая число от 1 до 9 в его словесное обозначение. Помогите написать предикат, проверяющий введена ли цифра, а не буква. При наличие буквы, вывести соответствующее сообщение.
Листинг программы
- domains
- int=integer
- i=int*
- s=string*
- predicates
- arab(int,string)
- numtostr(i,s)
- d(i,string,i)
- wwod(i,i)
- w(i)
- pp(i,i,i)
- clauses
- pp([],Y,Y).
- pp([X1|X],Y,Y2):-Y1=[X1|Y],pp(X,Y1,Y2).
- w([]):-nl.
- w([X|X1]):-write(X," "),w(X1).
- d(X,S,X1):-str_int(S,Z),!,X1=[Z|X].
- d(X,_,X).
- wwod(X,X2):-write("Vvedite X= "),readln(S),S<>"",!,D(X,S,X1),wwod(X1,X2).
- wwod(X,X1):-pp(X,[],X1).
- arab(0,"Nol").
- arab(1,"Odin").
- arab(2,"Dva").
- arab(3,"Tri").
- arab(4,"Chetire").
- arab(5,"Pyat").
- arab(6,"˜Shest").
- arab(7,"Sem").
- arab(8,"Vosem").
- arab(9,"Devyat").
- numtostr([],[]).
- numtostr([X|Xt],[S|St]):-arab(X,S),numtostr(Xt,St).
- goal
- wwod([],X),
- write("Ishodniy spisok:"), w(X),
- numtostr(X,S), write("Preobrazovanniy spisok:",S).
Решение задачи: «Предикат, проверяющий введена ли цифра, а не буква»
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).
Объяснение кода листинга программы
- В коде определены два домена: strl (строка символов) и intl (целое число).
- Также в коде определены два предиката: num2str и getDig.
- Предикат getDig преобразует целое число в строку, используя список строк с наименованиями цифр от 0 до 9.
- Предикат num2str преобразует строку символов в строку цифр, используя предикат getDig.
- В первой клаузе предиката getDig, если входной список пуст, то возвращается пустая строка.
- Во второй клаузе предиката getDig, если входной список не пуст, то из него удаляется первый элемент и преобразуется в строку цифр, после чего вызывается рекурсивно предикат getDig для оставшейся части списка.
- В первой клаузе предиката num2str, если входной список пуст, то возвращается пустая строка.
- Во второй клаузе предиката num2str, если первый элемент входного списка является цифрой от 0 до 9, то он преобразуется в целое число, вызывается рекурсивно предикат getDig для оставшейся части списка и в конце возвращается результат.
- Если первый элемент входного списка не является цифрой от 0 до 9, то возвращается сообщение
Not a digit!
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д