]> gitweb.factorcode.org Git - factor.git/blob - basis/channels/examples/examples.factor
Fix comments to be ! not #!.
[factor.git] / basis / channels / examples / examples.factor
1 ! Copyright (C) 2007 Chris Double. All Rights Reserved.
2 ! See http://factorcode.org/license.txt for BSD license.
3 !
4 ! Examples of using channels
5 USING: kernel threads channels math namespaces
6 locals sequences ;
7 IN: channels.examples
8
9 : (counter) ( channel n -- )
10     [ swap to ] 2keep 1 + (counter) ;
11
12 : counter ( channel -- )
13     2 (counter) ;
14
15 : counter-test ( -- n1 n2 n3 )
16     <channel> dup [ counter ] curry "Counter" spawn drop
17     [ from ] keep [ from ] keep from ;
18
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.
23     [
24         from swap dupd mod zero? not [ swap to ] [ 2drop ] if
25     ] 3keep filter ;
26
27 :: (sieve) ( prime c -- )
28     c from :> p
29     <channel> :> newc
30     p prime to
31     [ newc p c filter ] "Filter" spawn drop
32     prime newc (sieve) ;
33
34 : sieve ( prime -- )
35     ! Send prime numbers to 'prime' channel
36     <channel> dup [ counter ] curry "Counter" spawn drop
37     (sieve) ;
38
39 : sieve-test ( -- seq )
40     <channel> dup [ sieve ] curry "Sieve" spawn drop
41     V{ } clone swap
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
49     [ from swap push ] 2keep
50     drop ;