Сортировка строки пузырьком - Prolog

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

Здравствуйте, помогите пожалуйста решить задачу. Отсортировать слова в строке по алфавиту методом пузырька.
trace
domains
 s=string
predicates 
 sort(s,s)
 swap(s,s)
clauses  
 sort(InputStr,Sorted):-
  swap(InputStr,Str).
 
 swap("","").
 swap(IStr,Str):-
  fronttoken(IStr,T1,Rest),
  fronttoken(Rest,T2,Tail),
  T1>T2,
  concat(T1,Tail,Str1),         %меняет местами первые два слова.
  concat(" ",Str1,Str2),        
  concat(T2,Str2,Str3),
  swap(Str3,_).
 
 swap(IStr,Str):-               %если первые два менять не нужно, отрывает первое слово. 
  fronttoken(IStr,T1,Rest),
  swap(Rest,IStr).
 
goal
 clearwindow,
 S="A C B",
 R="",
 sort(S,R),
 write(S).
Проблемы начинаются в моменте, когда слов не остается и fronttoken фейлит, не могу понять, какие значения появляются в redo. Как я понимаю, это обратная рекурсия, но как с ней быть - хз. Буду очень признателен.

Код к задаче: «Сортировка строки пузырьком - Prolog»

textual
CALL: concat("A ","B C ","")
FAIL: concat

13   голосов, оценка 4.154 из 5


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