下に示したのは、表(或いは行列)形式で与えられたデータをcsvファイル形式で書き出すプログラムです。

ここでappend/3を使うのはfailでの失敗駆動を避けるためですが、少し不自然な感じがします。
どのように改良したら、もっと分り易いコードになるでしょうか。

put_csv_lines(_csvファイル,_区切り符号,LL) :-  
tell(_csvファイル),  
一行ずつ表示する(LL),  
told.  

一行ずつ表示する(LL) :-  
append(_,[L|R],LL),  
concat_atom(L,_区切り符号,_行表示),  
writef('%t\n',[_行表示]),  
R = [].  

ここで append/3 が使われている主な理由は最後の副目標 R = [] で全ての行が終了した時点で 述語も真で終わりたいからです。その問題がなければ、member/2 で良い筈です。

一行ずつ表示する(Outstream,LL) :-  
member(L,LL),  
concat_atom(L,_区切り符号,_行表示),  
swritef(_改行付き行表示,'%t\n',[_行表示]),  
write(Outstream,_改行付き行表示),  
fail.  
一行ずつ表示する(_,_).  

このスタイルを嫌ったのが上記の append/3 を使った定義ということになります。さて、他に これに代わる表現はないでしょうか?