1 ! Copyright (C) 2007 Chris Double. All Rights Reserved.
2 ! See http://factorcode.org/license.txt for BSD license.
4 ! Examples of using channels
5 USING: kernel threads channels math namespaces
9 : (counter) ( channel n -- )
10 [ swap to ] 2keep 1+ (counter) ;
12 : counter ( channel -- )
15 : counter-test ( -- n1 n2 n3 )
16 <channel> dup [ counter ] curry "Counter" spawn drop
17 [ from ] keep [ from ] keep from ;
19 : filter ( send prime recv -- )
20 #! Receives numbers from the 'send' channel,
21 #! filters out all those divisible by 'prime',
22 #! and sends to the 'recv' channel.
24 from swap dupd mod zero? not [ swap to ] [ 2drop ] if
27 :: (sieve) ( prime c -- )
31 [ newc p c filter ] "Filter" spawn drop
36 #! Send prime numbers to 'prime' channel
37 <channel> dup [ counter ] curry "Counter" spawn drop
40 : sieve-test ( -- seq )
41 <channel> dup [ sieve ] curry "Sieve" spawn drop
43 [ from swap push ] 2keep
44 [ from swap push ] 2keep
45 [ from swap push ] 2keep
46 [ from swap push ] 2keep
47 [ from swap push ] 2keep
48 [ from swap push ] 2keep
49 [ from swap push ] 2keep
50 [ from swap push ] 2keep