[EMAIL PROTECTED] wrote:
Hi, all! During some experiments I found a behaviour of cond during search that
I cannot explain. It looks like a bug to me. Can anyone please explain the
difference between the two calls to ExploreAll in the following:

--------------------------------------
declare
proc {F S}
   C
in
   S = {FS.var.upperBound [1#20]}
   C = ({FS.card S} <: 2)
   thread
      cond
         C = 1
      then
         {Browse here}
         case {FS.reflect.upperBound S} of
            [X] then {FS.include X S}
         else skip end
      end
   end
   {Space.waitStable}
   {FS.subset S {FS.value.make [1]}}
end
proc {F2 S}
   C
in
   S = {FS.var.upperBound [1#20]}
   thread
      cond
         {FS.card S} <: 2
      then
         {Browse here}
         case {FS.reflect.upperBound S} of
            [X] then {FS.include X S}
         else skip end
      end
   end
   {Space.waitStable}
   {FS.subset S {FS.value.make [1]}}
end

{ExploreAll F}
{ExploreAll F2}
----------------------------



I think that the reason is the same that justifies the difference in the following cases:

{Space.new proc {$ _}
              S = {FS.var.upperBound [1]}
              C = ({FS.card S} <: 2)
           in
              thread
                 Sp={Space.new proc{$ _} C = 1 end}
              in
                 {Browse {Space.ask Sp}}
              end
           end _}

{Space.new proc {$ _}
              S = {FS.var.upperBound [1]}
           in
              thread
                 Sp={Space.new proc{$ _} {FS.card S} <: 2 end}
              in
                 {Browse {Space.ask Sp}}
              end
           end _}

In the second case you wait until S is bound.

Cheers,
Luis

_________________________________________________________________________________
mozart-users mailing list                               
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to