Prologのプログラミングというのは、基本的にデータベースの参照に
終始しているといえます。手続き的な要素は
member/2とfindall/3,repeat/0,for/3とfail,true,not/1,でほとんど
構成され、append/3,reverse/2,sort/2のような述語でさえ、めったに
使うことはありません。代表的なパターンは
1・・データベース述語の参照からfailに至るバックトラックパターン
2・・findallで一旦データベース述語をリストに構成して再帰述語に
渡すパターン(データベースではなくstreamであることもあります)
3・・memberでリストの要素を取り出し、failでバックトラックするパターン
この3パターンの組み合わせだけでほとんどの述語(質問)は構成されます。
もちろんC言語などと同様文字列述語なども頻繁に使用されますが、
上記のパターンの中にフィルターとして現れるということになります。