このディレクトリの索引

http://pc11.2ch.net/test/read.cgi/db/1252492296/330 
#  ■テーブルデータ 
#  ・IDテーブル    #  ・マスターテーブル 
#  1, 2, 3      #  1, A 
#  1, 2, 4      #  2, A 
#  5, -1, -1     #  3, A 
#  -1, 1, 2      #  4, B 
#  2, -1, 5      #  -1, Z 
# 
#  ■やりたいこと 
#  マスターテーブルを参照してIDテーブルの各IDにクラス(A, B, Z)を振り当て、 
#  各レコードが同一クラスに属するか否かを判定し、同一クラスに属するレコード 
#  だけクラス付で抽出する。 
#  ここで「同一クラスに属する」とは、クラスA, B, Zからなるグループに対して、 
#  Z以外の要素が一種類しか存在しない場合に、グループはそのクラスに属すると定める。 
#  最終的に欲しいデータは 
# 
#  1, 2, 3, A 
#  5, -1, -1, B 
#  -1, 1, 2, A 
# 
#  となります。よろしくお願いします。

'クラスA, B, Zからなるグループに対して、Z以外の要素が一種類しか存在しない' :- 
    'ID'(Id_1,Id_2,Id_3), 
    マスター(Id_1,_クラス1), 
    マスター(Id_2,_クラス2), 
    マスター(Id_3,_クラス3), 
    setof(U,(member(U,[_クラス1,_クラス2,_クラス3]),\+(U='Z')),[_クラス]), 
    write_formatted('%t,%t,%t,%t\n',[Id_1,Id_2,Id_3,_クラス]), 
    fail. 
'クラスA, B, Zからなるグループに対して、Z以外の要素が一種類しか存在しない'.