on 492ae2f help sign in
126 lines 3.1 kB history raw
1### `++mink`
3Mock interpreter
5Bottom-level mock (virtual nock) interpreter. Produces a
6`++tone`, a nock computation result. If nock 11 is invoked, `sky`
7computes on the subject and produces a `++unit` result. An empty
8result becomes a `%1` `++tone`, indicating a block.
10Accepts
11-------
13`sub` is the subject as a noun.
15`fol` is the formula as a noun.
17`sky` is an `%iron` gate invoked with nock operator 11.
19Produces
20--------
22A `++tone`.
24Source
25------
27 ++ mink
28 ~/ %mink
29 |= {{sub/* fol/*} gul/$-({* *} (unit (unit)))}
30 =+ tax=*(list {@ta *})
31 |- ^- tone
32 ?@ fol
33 [%2 tax]
34 ?: ?=(^ -.fol)
35 =+ hed=$(fol -.fol)
36 ?: ?=($2 -.hed)
37 hed
38 =+ tal=$(fol +.fol)
39 ?- -.tal
40 $0 ?-(-.hed $0 [%0 p.hed p.tal], $1 hed)
41 $1 ?-(-.hed $0 tal, $1 [%1 (weld p.hed p.tal)])
42 $2 tal
43 ==
44 ?+ fol
45 [%2 tax]
46 ::
47 {$0 b/@}
48 ?: =(0 b.fol) [%2 tax]
49 ?: =(1 b.fol) [%0 sub]
50 ?: ?=(@ sub) [%2 tax]
51 =+ [now=(cap b.fol) lat=(mas b.fol)]
52 $(b.fol lat, sub ?:(=(2 now) -.sub +.sub))
53 ::
54 {$1 b/*}
55 [%0 b.fol]
56 ::
57 {$2 b/{^ *}}
58 =+ ben=$(fol b.fol)
59 ?. ?=($0 -.ben) ben
60 ?>(?=(^ p.ben) $(sub -.p.ben, fol +.p.ben))
61 ::?>(?=(^ p.ben) $([sub fol] p.ben)
62 ::
63 {$3 b/*}
64 =+ ben=$(fol b.fol)
65 ?. ?=($0 -.ben) ben
66 [%0 .?(p.ben)]
67 ::
68 {$4 b/*}
69 =+ ben=$(fol b.fol)
70 ?. ?=($0 -.ben) ben
71 ?. ?=(@ p.ben) [%2 tax]
72 [%0 .+(p.ben)]
73 ::
74 {$5 b/*}
75 =+ ben=$(fol b.fol)
76 ?. ?=($0 -.ben) ben
77 ?. ?=(^ p.ben) [%2 tax]
78 [%0 =(-.p.ben +.p.ben)]
79 ::
80 {$6 b/* c/* d/*}
81 $(fol =>(fol [2 [0 1] 2 [1 c d] [1 0] 2 [1 2 3] [1 0] 4 4 b]))
82 ::
83 {$7 b/* c/*} $(fol =>(fol [2 b 1 c]))
84 {$8 b/* c/*} $(fol =>(fol [7 [[0 1] b] c]))
85 {$9 b/* c/*} $(fol =>(fol [7 c 0 b]))
86 {$10 @ c/*} $(fol c.fol)
87 {$10 {b/* c/*} d/*}
88 =+ ben=$(fol c.fol)
89 ?. ?=($0 -.ben) ben
90 ?: ?=(?($hunk $hand $lose $mean $spot) b.fol)
91 $(fol d.fol, tax [[b.fol p.ben] tax])
92 $(fol d.fol)
93 ::
94 {$11 b/* c/*}
95 =+ ref=$(fol b.fol)
96 =+ ben=$(fol c.fol)
97 ?. ?=($0 -.ref) ref
98 ?. ?=($0 -.ben) ben
99 =+ val=(gul p.ref p.ben)
100 ?~(val [%1 p.ben ~] ?~(u.val [%2 [[%hunk (mush p.ben)] tax]] [%0 u.u.val]))
101 ==
102 ::
105Examples
106--------
108 ~zod/try=> (mink [20 [4 0 1]] $~)
109 [%0 p=21]
110 ~zod/try=> (mink [[90 5 3] [0 3]] $~)
111 [%0 p=[5 3]]
112 ~zod/try=> (mink 20^[4 0 1] $~)
113 [%0 p=21]
114 ~zod/try=> (mink [90 5 3]^[0 3] $~)
115 [%0 p=[5 3]]
116 ~zod/try=> (mink [0]^[11 1 20] $~)
117 [%1 p=~[20]]
118 ~zod/try=> (mink [0]^[11 1 20] |=(a=* `[40 a]))
119 [%0 p=[40 20]]
120 ~zod/try=> (mink [5]^[0 2] $~)
121 [%2 p=~]
122 ~zod/try=> (mink [5]^[10 yelp/[0 1] 0 0] $~)
123 [%2 p=~[[~.yelp 5]]]
126***