Ответ в теме: Преобразовать строку в упорядоченный список слов

      Комментарии к записи Ответ в теме: Преобразовать строку в упорядоченный список слов отключены
#1964

Для начала преобразуете список в список слов, а затем — выполняете сортировку любым методом, например слиянием. Для решения обоих задач достаточно изменить правило сравнения элементов.

Лексикографическое сравнение строк выполняется как поэлементное сравнение списков:

less(_String_A, []):-!, fail.
less([], _String_B):-!.
less([Head_A|Tail_A], [Head_B|Tail_B]):-
Head_A < Head_B, !;
Head_A > Head_B, !, fail;
less(Tail_A, Tail_B).

Если вторая строка закончилась, то она не может быть меньше первой — функция завершается неудачей.
Если закончилась первая строка — то она меньше любой не пустой строки.
В остальных случаях от исходных строк отделяются первые символы, если они равны, то выполняется рекурсивная обработка остальных элементов строк.

Сравнение строк по длине можно выполнить с использованием встроенной функции length:

less(String_A, String_B):-
length(String_A, Length_A),
length(String_B, Length_B),
Length_A < Length_B.

При использовании алгоритма сортировки слияния надо использовать один из операторов less в функции объединения упорядоченных списков:
rangConcat([], List2, List2):-!.
rangConcat(List1, [], List1):-!.
rangConcat([Head1|Tail1], [Head2|Tail2], [Head1|TailResult]):-
less(Head1, Head2) !, rangConcat(Tail1, [Head2|Tail2], TailResult).
rangConcat(List1, [Head2|Tail2], [Head2|TailResult]):-
rangConcat(List1, Tail2, TailResult).