このディレクトリの索引

# 出典 :: #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 # # となります。よろしくお願いします。 'ID'(1,2,3). 'ID'(1,2,4). 'ID'(5,-1,-1). 'ID'(-1,1,2). 'ID'(2,-1,5). マスター(1,'A'). マスター(2,'A'). マスター(3,'A'). マスター(4,'B'). マスター(5,'B'). マスター(-1,'Z'). 'IDの組のId_1,Id_2,Id_3が、マスターで定義されるクラスA, B, Zからなるグループに対して、Z以外の要素が一種類しか存在しない'(Id_1,Id_2,Id_3,_クラス) :- 'ID'(Id_1,Id_2,Id_3), 'マスターで定義されるクラスA, B, Zからなるグループに対して、Z以外の要素が一種類しか存在しない'(Id_1,Id_2,Id_3,_クラス). 'マスターで定義されるクラスA, B, Zからなるグループに対して、Z以外の要素が一種類しか存在しない'(Id_1,Id_2,Id_3,_クラス) :- setof(_クラス,_クラス ^ ( 'マスターで定義されるクラスA, B, Zからなるグループに対して、Z以外の要素が'(Id_1,Id_2,Id_3,_クラス)),[_クラス]). 'マスターで定義されるクラスA, B, Zからなるグループに対して、Z以外の要素が'(Id_1,Id_2,Id_3,_クラス) :- 'マスターで定義されるクラスA, B, Zからなるグループに対して、'(Id_1,Id_2,Id_3,_クラス), _クラス \== 'Z'. 'マスターで定義されるクラスA, B, Zからなるグループに対して、'(Id_1,Id_2,Id_3,_クラス) :- member(Id,[Id_1,Id_2,Id_3]), マスター(Id,_クラス).