% $Id: ChoiceExamples.oz,v 1.2 2008/12/03 17:14:15 leavens Exp leavens $ \insert 'SolveFirst.oz' declare proc {Vowel ?R} choice R=a [] R=e [] R=i [] R=o [] R=u end end % Solve returns a lazy List L = {Solve Vowel} {Browse L} {Delay 5000} _={List.take L 2} % A choice suspends if used directly % {Browse {Vowel $}} % But can be used in a search with Solve {Browse {List.take {Solve Vowel} 4}} % fail continues with next alternative of most recent choice declare proc {Distinct ?Res} V1 V2 in {Vowel V1} {Vowel V2} if V1 == V2 then fail end Res=V1#V2 end {Browse {List.take {Solve Distinct} 7}} {Browse {List.take {Solve proc {$ ?Z} {Distinct Z} end} 15}} {Browse {List.take {Solve Distinct} 21}}