>>762
実際に使うのは、repeatを伴う入力処理の場合に限られると思うが

年齢(大田,33).
年齢(神戸,25).
年齢(下山,40).
・・・

で40歳が現れるまでの年齢リストを得たい場合も、

?- findall(_名前,(年齢(_名前,_年齢),(_年齢=40,!,fail;true)),_年齢リスト).

と書く。一般にこの問題が表面に出ないのは、普通は、

?- findall((_名前,_年齢),年齢(_名前,_年齢),L), ・・・・

と一旦、全年齢データをリストに変換してから、処理をするから。