文字検索というと以下のようなコードが代表的なものですね。
data(abcdefghijklmnop).
?- atom_chars(Data,L),
append(_,[A|R],L),
append(B,[C|_],R),
member(A,[c,e,f]),C @>= k,C @=< m,
concat([A,B,C],X).
質問2行目からmemberから始まる4行目から解析して
最後のconcatのA,B,Cを見つけ出すことは難しいですね。
ここでは質問者が陽にconcat/2を与えています。
search(Data,Q,X) といった述語を定義しようと思ったときの
課題ということですが。