On my system (Mozart Engine 1.3.1 (20040617) on Windows XP) the code snippet 
behaves as expected by you: the Browser displays "1|3|_".

This is the case even if I include the definition of Filter in the source code.

Maybe a version issue? I'll try this at home on a newer Mozart version later 
today.

Wolfgang


> Dear all,
> 
> I don't fully understand the behaviour of Filter in concurrent  
> programming. List.filter is defined as follows
> 
> fun {Filter Xs F}
>     case Xs of nil then nil
>     [] X|Xr then if {F X} then X|{Filter Xr F}
>     else {Filter Xr F} end
>     end
> end
> 
> I would expect that this definition works even for partly determined  
> Xs (i.e. as far as Xs is determined). For example, I expect the code  
> below to immediately show in the browser the following: 1|3|_
> 
> declare
> Xs = [1 2 3 _ 4]
> Ys
> thread Ys = {Filter Xs IsOdd} end
> {Browse Ys}
> 
> However, Filter blocks until Xs is fully determined. Why is this so?  
> By contrast, things like Map and ForAll use a very similar case  
> statement in their definition (but without an else clause) and they  
> work fine for partially determined lists.
> 
> Thank you!
> 
> Best
> Torsten
> 
> BTW: I needed a variant of filter which returns/skips list elements  
> as soon as enough information is provided to decided either way, but  
> possibly changes the order of list elements:
> 
> proc {UnorderedFilter Xs F ?Result}
>     P = {NewPort Result}
> in
>     {ForAll Xs proc {$ X}
>                thread
>                   if {F X} then {Send P X} end
>                end
>             end}
> end
> 
> --
> Torsten Anders
> Interdisciplinary Centre for Computer Music Research
> University of Plymouth
> Office: +44-1752-233667
> Private: +44-1752-558917
> http://strasheela.sourceforge.net
> http://www.torsten-anders.de
> 
> 
> 
> 
> _________________________________________________________________________________
> mozart-users mailing list                              
> [email protected]
> http://www.mozart-oz.org/mailman/listinfo/mozart-users

-- 
Der GMX SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen! 
Ideal für Modem und ISDN: http://www.gmx.net/de/go/smartsurfer
_________________________________________________________________________________
mozart-users mailing list                               
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to