図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 %