Сортировка слов строки - Prolog

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

Помогите написать программу на Прологе, в которой вводится строка, ее слова сортируются по алфавиту и выводится уже обработанная строка.

Код к задаче: «Сортировка слов строки - 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).

8   голосов, оценка 3.375 из 5


СОХРАНИТЬ ССЫЛКУ