Сортировка слов строки - Prolog
Формулировка задачи:
Помогите написать программу на Прологе, в которой вводится строка, ее слова сортируются по алфавиту и выводится уже обработанная строка.
Решение задачи: «Сортировка слов строки»
textual
Листинг программы
domains
stringl=string*
predicates
stra(char,string)
words(string,string,stringl)
split(stringl,string,stringl,stringl)
app(stringl,stringl,stringl)
sort(stringl,stringl)
merge(stringl,string)
task(string,string)
clauses
stra(X,Y) :- frontchar(Y,X,"").
words("",S,[S]) :- S<>"".
words("","",[]).
words(Q,T,[T|R]) :- frontchar(Q,A,B), A=' ', T <> "", words(B,"",R).
words(Q,T,R) :- frontchar(Q,A,B), A=' ', T = "", words(B,"",R).
words(Q,T,R) :- frontchar(Q,A,B), A<>' ', stra(A,SA), concat(T,SA,TT) , words(B,TT,R).
split([],_,[],[]).
split([H|R],G,[H|R1],R2) :- H<G,split(R,G,R1,R2).
split([H|R],G,R1,[H|R2]) :- H>=G,split(R,G,R1,R2).
app([],X,X).
app([H|R],X,[H|Y]) :- app(R,X,Y).
sort([],[]).
sort([H|R],Z) :- split(R,H,R1,R2), sort(R1,S1), sort(R2,S2), app(S1,[H],Q), app(Q,S2,Z).
merge([],"").
merge([H|R],Z):- merge(R,Z1), concat(" ",Z1,Z2), concat(H,Z2,Z).
task(X,R) :- words(X,"",W),sort(W,WS), merge(WS,R).