最後活躍 1 day ago

An example of turning an isolated state machine into multiple.

修訂 025429bfd7ab142ed6317a178bb45ce5115635e6

multistate.nv 原始檔案 Playground
1|# A turnstile, a state machine. #|
2
3|:state: locked :action: push| :state: locked
4|:state: locked :action: coin| :state: un-locked
5
6|:state: un-locked :action: push| :state: locked
7|:state: un-locked :action: coin| :state: un-locked
8
9
10
11
12|# I want/need multiple machines. #|
13
14||:: create machine entrance :state: locked
15 :: create machine exit :state: locked
16 :: as entrance do
17 :: (push coin push)
18 :: end
19 :: as exit do
20 :: (coin push push coin)
21 :: end
22
23|:: create machine $x :state: $state|
24 :machines: $x $state
25
26|:: as $machine do|
27 :: unpack machine $machine
28 :: $machine is running
29
30|:: $machine is running :: end|
31 :: repack machine $machine
32 :: reset machines
33|:: $machine is running? :: $action|
34 :action: $action
35
36|:: $action :machine: $machine?|
37 :: unpack machine $machine :action: $action
38 :: repack machine $machine
39 :: reset machines
40
41|:: unpack machine $x :machines: $x $state|
42 :state: $state
43|:: unpack machine $x? :machines: $y $state|
44 :checked machines: $y $state
45|:: unpack machine $x|
46 :not found: $x
47 :: reset machines
48
49|:: repack machine $x :state: $state|
50 :machines: $x $state
51
52|:: reset machines? :checked machines: $name $state|
53 :machines: $name $state
54|:: reset machines|