>>806 普通はこうですか。
flatten([],[]).
flatten([A|R],L) :- is_list(A),flatten(A,L1),flatten(R,L2),append(L1,L2,L).
flatten([A|R],[A|R1]) :- not(is_list(A)),flatten(R,R1).

append/3 も重リストの親戚だからあまり差はないなぁ。初心者が
三ヶ月かかるといったのは、コルメライワのグループが最初の
Prologらしきものを開発してからappend/3を発見するまでに
三ヶ月を要したという故事によるわけで・・。