このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 161代目 #625 # [1] 授業単元:自己参照構造体 # [2] 問題文(含コード&リンク): # 以下のクラス・氏名・順位が定義された自己参照構造体をクラス毎に順位の昇順にソートしなさい。 # 3-1 A君 3位 # 3-1 B君 2位 # 3-1 C君 4位 # 3-1 D君 1位 # 3-2 P君 2位 # 3-2 Q君 3位 # 3-2 R君 1位 # 3-3 X君 1位 # 3-3 Y君 2位 # **************** # 結果 # 3-1 D 1 # 3-1 B 2 # 3-1 A 3 # 3-1 C 4 # 3-2 R 1 # 3-2 P 2 # 3-2 Q 3 # :- dynamic('クラス・氏名・順位'/3). 'クラス・氏名・順位'(3-1,'A',3). 'クラス・氏名・順位'(3-1,'B',2). 'クラス・氏名・順位'(3-1,'C',4). 'クラス・氏名・順位'(3-1,'D',1). 'クラス・氏名・順位'(3-2,'P',2). 'クラス・氏名・順位'(3-2,'Q',3). 'クラス・氏名・順位'(3-2,'R',1). 'クラス・氏名・順位'(3-3,'X',1). 'クラス・氏名・順位'(3-3,'Y',2). 'クラス・氏名・順位が定義された述語をクラス毎に順位の昇順にソートしなさい。 ' :- forall('クラス・順位をキーに整列して取り出す'(_クラス,_順位,_氏名), 取り出した順に定義し直す(_クラス,_氏名,_順位)). 'クラス・順位をキーに整列して取り出す'(_クラス,_氏名,_順位) :- 'クラス・順位をキーに整列して'(LL2), 取り出す(LL2,_クラス,_氏名,_順位). 'クラス・順位をキーに整列して'(LL2) :- findall([_クラス,_順位,_氏名],( retract('クラス・氏名・順位'(_クラス,_氏名,_順位))),LL1), sort(LL1,LL2). 取り出す(LL2,_クラス,_氏名,_順位) :- member([_クラス,_氏名,_順位],LL2). 取り出した順に定義し直す(_クラス,_氏名,_順位) :- assertz('クラス・氏名・順位'(_クラス,_氏名,_順位)).