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 sequences ;
8 : (counter) ( channel n -- )
9 [ swap to ] 2keep 1 + (counter) ;
11 : counter ( channel -- )
14 : counter-test ( -- n1 n2 n3 )
15 <channel> dup [ counter ] curry "Counter" spawn drop
16 [ from ] keep [ from ] keep from ;
18 : filter ( send prime recv -- )
19 ! Receives numbers from the 'send' channel,
20 ! filters out all those divisible by 'prime',
21 ! and sends to the 'recv' channel.
23 from swap dupd mod zero? not [ swap to ] [ 2drop ] if
26 :: (sieve) ( prime c -- )
30 [ newc p c filter ] "Filter" spawn drop
34 ! Send prime numbers to 'prime' channel
35 <channel> dup [ counter ] curry "Counter" spawn drop
38 : sieve-test ( -- seq )
39 <channel> dup [ sieve ] curry "Sieve" spawn drop
41 [ from swap push ] 2keep
42 [ from swap push ] 2keep
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