blob: 94b03185fbff3b566084fc2faae4bbbc2d092f5c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
⍝ The following demonstrates message passing between an 'iota sever',
⍝ and a client (the user of the iota function). The client always initiates
⍝ communication, and the server must be running, but the client should not
⍝ be able to notice a difference between monadic ⍳ and the iota function,
⍝ even though one does the computation in a different thread.
iotaServer←{
msg←{1 ⍵}⍇⍬
msg≡'stop': ⎕←'Bye bye from indexer'
(from num)←msg
_←(⍳num)⍈from
∇⍵
}
id←0 ⍝ this is an invalid thread id, so it is a sane starting point
start←{
id=0: iotaServer&⍬
id
}
stop←{
'stop'⍈id
}
flush←{
⍺←0
12::⍵
msg←⍶⍇0
acc←⍺{
(a b)←⍵
⍺=0:,⊂b
a,⊂b
}⍵ msg
(⍺+1)∇acc
}
iota←{
11::'Sorry, the iota server is not running (or some other domain error happened)'
12::'Sorry, the iota server was too slow to respond'
_←(⎕self ⍵)⍈id
{1 ⍵}⍇⍺
}
|