Заменить в строке все цифровые символы нулями - Prolog
Формулировка задачи:
И google, и yandex мне не помогли. =). Темы такой на форуме нету, поэтому прошу поделится мыслями.
Требуется заменить в строке все цифровые символы нулями.
Вначале пытался сделать в общем виде для замены одного вводимого символа другим, но как-то не работает.
Не допонимаю, сам алгоритм работы похоже я:
И как сделать проверку на цифровые символы?
Листинг программы
- predicates
- zamena(string,char,char,string)
- result
- clauses
- zamena("",_,_,""):- !.
- zamena(S,C,C1,SO):-frontchar(S,C,S1),!,zamena(S1,C,C1,S2),frontchar(SO,C1,S2).
- zamena(S,C,C1,SO):-frontchar(S,C2,S1),zamena(S1,C,C1,S2),frontchar(SO,C1,S2).
- result:-write("vvedite_stroku_slov"),nl,
- readln(S),write("zamenyaemyi_simvol"),nl,
- readchar(C),write("zameny_simvol"),nl,
- readchar(C1),zamena(S,C,C1,SO),
- write("stroka_s_zamenoy-"),zamena(S,C,C1,SO),write(SO).
- goal
- result
Листинг программы
- zamena("",_,_,""):-!. %% голова рекурсии - из пустого получаем пустой.
- zamena(S,C,C1,SO):-frontchar(S,C,S1),!,zamena(S1,C,C1,S2),frontchar(SO,C1,S2).
- вот тут загвоздка - %% символ C оказался первым символом строки S,S1 — остаток строки S
- %% далее рекурсивно передаем вызов на S1 — остаток строки S
- frontchar(SO,C1,S2). %%А что происходит здесь? Мы отрезаем вставляемый первый символ С1 из
- %% пустой строки? Или как передается заменяемый символ С1 в строку SO?
Решение задачи: «Заменить в строке все цифровые символы нулями»
textual
Листинг программы
- predicates
- nondeterm change(string,string)
- nondeterm cyfra(char)
- clauses
- cyfra('1').
- cyfra('9').
- change("","").
- change(S,R):-
- frontchar(S,H,T),
- cyfra(X),H=X,!,
- change(T,Tr),
- frontchar(R,'0',Tr).
- change(S,R):-
- frontchar(S,H,T),
- change(T,Tr),
- frontchar(R,H,Tr).
- goal
- change("as1231 3129312",X).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д