% emulating Prolog in Oz % rainy declare Rainy Cold Snowy fun {Rainy} choice seattle [] rochester end end fun {Cold} rochester end proc {Snowy X} {Rainy X} {Cold X} end {Browse {Search.base.all proc {$ C} {Rainy C} end}} {Browse {Search.base.all Snowy}} %family declare proc {Father X Y} choice X = bob Y = alice [] X=bob Y = peter end end proc {Mother X Y} choice X = carol Y = peter [] X = carol Y = alice end end proc {Sibling X Y} Z W in {Father Z X} {Mother W X} {Father Z Y} {Mother W Y} if X == Y then fail end end % calculate all {Browse {Search.base.all proc {$ S} X Y in S=sib(X Y) {Sibling X Y} end}} % append declare Append proc {Append Xs Ys Zs} choice Xs = nil Zs = Ys [] X Xr Zr in Xs=X|Xr Zs=X|Zr {Append Xr Ys Zr} end end % new search query declare P proc {P S} X Y in {Append X Y [1 2 3]} S=sol(X Y) end % new search engine declare E E = {New Search.object script(P)} % calculate and display one at a time {Browse {E next($)}} % calculate all {Browse {Search.base.all proc {$ S} X Y in S=sol(X Y) {Append X Y [1 2 3]} end}}