summaryrefslogtreecommitdiff
path: root/tests/demo.apl
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 ⍵}⍇⍺
}