next up previous contents
Next: 2.3 トレーサの使用方法 Up: 2.2 サスペンションメカニズム Previous: 2.2 サスペンションメカニズム

サスペンドするプログラムのトレース

2.2のプログラムで, subsetの第3節を

subset(yes,[A|B],Y,Ans) :- true | subset(Ans1,B,Y,Ans), member(A,Y,Ans1).
とするとサスペンションが起きる.

このプログラムのトレース結果を以下に示す.

% klic -o susp susp.kl1                                                1
% susp -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:+subset(_13,[1],[1,3,5],_3)
   5   1:+member(3,[1,3,5],_13)?                                      10
   4 CALL:main:subset(_13,[1],[1,3,5],_3)? 
   4 SUSP:main:subset(_13,[1],[1,3,5],_3)? 
   5 CALL:main:member(3,[1,3,5],_63D7)? 
   5 REDU:main:member(3,[1,3,5],_63D7) :-
   6   0:+member(3,[3,5],_63D7)?                                      15
   6 CALL:main:member(3,[3,5],_63D7)? 
   6 REDU:main:member(3,[3,5],yes) :-
   4   0!+subset(yes,[1],[1,3,5],_3)? 
   4 CALL:main:subset(yes,[1],[1,3,5],_3)? 
   4 REDU:main:subset(yes,[1],[1,3,5],_3) :-                          20
   7   0:+subset(_29,[],[1,3,5],_3)
   8   1:+member(1,[1,3,5],_29)? 
   7 CALL:main:subset(_29,[],[1,3,5],_3)? 
   7 SUSP:main:subset(_29,[],[1,3,5],_3)? 
   8 CALL:main:member(1,[1,3,5],_63B8)?                               25
   8 REDU:main:member(1,[1,3,5],yes) :-
   7   0!+subset(yes,[],[1,3,5],_3)? 
   7 CALL:main:subset(yes,[],[1,3,5],_3)? 
   7 REDU:main:subset(yes,[],[1,3,5],yes)? 
   3 CALL:io:outstream([print(yes),nl])? s                            30
yes
%



next up previous contents
Next: 2.3 トレーサの使用方法 Up: 2.2 サスペンションメカニズム Previous: 2.2 サスペンションメカニズム



KLIC