Идеологически более верная. g(Text,Word) :- member(Word, Text), not(disjoinable(Text,Word)), not(better_word(Text,Word)). disjoinable(Text,Word) :- member(NewWord, Text), disj_word(Word,NewWord). disj_word([],Word). disj_word([Head|Tail],NewWord) :- not(member(Head,NewWord)), disj_word(Tail,NewWord). better_word(Text,Word) :- len(Word,Len), member(AnotherWord, Text), AnotherWord \= Word, not(disjoinable(Text,AnotherWord)), len(AnotherWord, AnotherLen), Len > AnotherLen. len([],0). len([H|T], Len) :- len(T,Len1), Len is Len1+1.