next up previous contents
Next: トレース結果の読み方 Up: 2.1.2 トレーサを用いたリダクション状況の観測 Previous: 2.1.2 トレーサを用いたリダクション状況の観測

プログラムをトレーサ付きで実行する方法

2.2に例題として, 数を要素とするあるリストが他のリスト の部分集合となっているか調べるプログラムを示す.

  
図 2.2: 部分集合をチェックするプログラム

生成されたオブジェクトプログラムを -t オプションを付けて起動し, <CR> を入力し続けると以下に示すように, 実行をトレースできる.

% klic -o subset subset.kl1	                                       1
% subset -t
   1 CALL:main:main? 							 
   1 REDU:main:main :-
   2   0:+subset(yes,[3,1],[1,3,5],_3)	                               5
   3   1:+io:outstream([print(_3),nl])? 
   2 CALL:main:subset(yes,[3,1],[1,3,5],_3)? 
   2 REDU:main:subset(yes,[3,1],[1,3,5],_3) :-
   4   0:+member(3,[1,3,5],_11)
   5   1:+subset(_11,[1],[1,3,5],_3)?                                 10
   4 CALL:main:member(3,[1,3,5],_11)? 
   4 REDU:main:member(3,[1,3,5],_11) :-
   6   0:+member(3,[3,5],_11)? 
   6 CALL:main:member(3,[3,5],_11)? 
   6 REDU:main:member(3,[3,5],yes)?                                   15
   5 CALL:main:subset(yes,[1],[1,3,5],_3)? 
   5 REDU:main:subset(yes,[1],[1,3,5],_3) :-
   7   0:+member(1,[1,3,5],_21)	
   8   1:+subset(_21,[],[1,3,5],_3)? 
   7 CALL:main:member(1,[1,3,5],_21)?                                 20
   7 REDU:main:member(1,[1,3,5],yes)? 
   8 CALL:main:subset(yes,[],[1,3,5],_3)? 
   8 REDU:main:subset(yes,[],[1,3,5],yes)? 
   3 CALL:io:outstream([print(yes),nl])? s
yes                                                                   25
%



next up previous contents
Next: トレース結果の読み方 Up: 2.1.2 トレーサを用いたリダクション状況の観測 Previous: 2.1.2 トレーサを用いたリダクション状況の観測



KLIC