on 140ac0e help sign in
601 lines 10 kB history raw
1# 2h: set logic
3### `++in`
5Set operations
7Core whose arms contain a variety of functions that operate on `++set`s. Its sample accepts the input `++set` to be manipulated.
9Accepts
10-------
12A `++set`.
14Source
15------
17 ++ in :: set engine
18 ~/ %in
19 |_ a/(set)
21Examples
22--------
24 > ~(. in (sa "asd"))
25 <13.evb [nlr(^$1{@tD $1}) <414.fvk 101.jzo 1.ypj %164>]>
27### `+-all:in`
29Logical AND
31Computes the logical AND on every element in `a` slammed with `b`,
32producing a boolean.
34Accepts
35-------
37`a` is a `++set`.
39`b` is a wet gate that accepts a noun and produces a boolean.
41Produces
42--------
44A boolean.
46Source
47------
49 +- all :: logical AND
50 ~/ %all
51 |* b/$-(* ?)
52 |- ^- ?
53 ?~ a
54 &
55 ?&((b n.a) $(a l.a) $(a r.a))
58Examples
59--------
61 > =b (sa `(list [@t *])`[['a' 1] ['b' [2 3]] ~])
62 > (~(all in b) |=(a/* ?@(+.a & |)))
63 %.n
64 > =b (sa `(list @t)`['john' 'bonita' 'daniel' 'madeleine' ~])
65 > (~(all in b) |=(a/@t (gte a 100)))
66 %.y
68------------------------------------------------------------------------
70### `+-any:in`
72Logical OR
74Computes the logical OR on every element of `a` slammed with `b`.
76Accepts
77-------
79`a` is a `++set`.
81`b` is a gate that accepts a noun and produces a boolean.
83Produces
84--------
86A boolean.
88Source
89------
91 +- any :: logical OR
92 ~/ %any
93 |* b/$-(* ?)
94 |- ^- ?
95 ?~ a
96 |
97 ?|((b n.a) $(a l.a) $(a r.a))
98 ::
101Examples
102--------
104 > =b (sa `(list [@t *])`[['a' 1] ['b' [2 3]] ~])
105 > (~(any in b) |=(a/* ?@(+.a & |)))
106 %.y
107 > =b (sa `(list @t)`['john' 'bonita' 'daniel' 'madeleine' ~])
108 > (~(any in b) |=(a/@t (lte a 100)))
109 %.n
111------------------------------------------------------------------------
113### `+-del:in`
115Remove noun
117Removes `b` from the `++set` `a`.
119Accepts
120-------
122`a` is a set.
124`b` is a noun.
126Produces
127--------
129A set.
131Source
132------
134 +- del :: b without any a
135 ~/ %del
136 |* b/*
137 |- ^+ a
138 ?~ a
139 ~
140 ?. =(b n.a)
141 ?: (hor b n.a)
142 [n.a $(a l.a) r.a]
143 [n.a l.a $(a r.a)]
144 |- ^- {$?($~ _a)}
145 ?~ l.a r.a
146 ?~ r.a l.a
147 ?: (vor n.l.a n.r.a)
148 [n.l.a l.l.a $(l.a r.l.a)]
149 [n.r.a $(r.a l.r.a) r.r.a]
150 ::
153Examples
154--------
156 > =b (sa `(list @t)`['a' 'b' 'c' ~])
157 > (~(del in b) 'a')
158 {'c' 'b'}
159 > =b (sa `(list @t)`['john' 'bonita' 'daniel' 'madeleine' ~])
160 > (~(del in b) 'john')
161 {'bonita' 'madeleine' 'daniel'}
162 > (~(del in b) 'susan')
163 {'bonita' 'madeleine' 'daniel' 'john'}
165------------------------------------------------------------------------
167### `+-dig:in`
169Axis a in b
171Produce the axis of `b` within `a`.
173Accepts
174-------
176`a` is a `++set`.
178`b` is a noun.
180Produces
181--------
183The `++unit` of an atom.
185Source
186------
188 +- dig :: axis of a in b
189 |= b/*
190 =+ c=1
191 |- ^- (unit @)
192 ?~ a ~
193 ?: =(b n.a) [~ u=(peg c 2)]
194 ?: (hor b n.a)
195 $(a l.a, c (peg c 6))
196 $(a r.a, c (peg c 7))
197 ::
201Examples
202--------
204 > =a (sa `(list @)`[1 2 3 4 5 6 7 ~])
205 > a
206 {5 4 7 6 1 3 2}
207 > -.a
208 n=6
209 > (~(dig in a) 7)
210 [~ 12]
211 > (~(dig in a) 2)
212 [~ 14]
213 > (~(dig in a) 6)
214 [~ 2]
216------------------------------------------------------------------------
218### `+-gas:in`
220Concatenate
222Insert the elements of a `++list` `b` into a `++set` `a`.
224Accepts
225-------
227`a` is a set.
229`b` is a list.
231Produces
232--------
234A `++set`.
236Source
237------
239 +- gas :: concatenate
240 ~/ %gas
241 |= b/(list _?>(?=(^ a) n.a))
242 |- ^+ a
243 ?~ b
244 a
245 $(b t.b, a (put i.b))
246 ::
249Examples
250--------
252 > b
253 {'bonita' 'madeleine' 'rudolf' 'john'}
254 > (~(gas in b) `(list @t)`['14' 'things' 'number' '1.337' ~])
255 {'1.337' '14' 'number' 'things' 'bonita' 'madeleine' 'rudolf' 'john'}
256 > (~(gas in s) `(list ,@t)`['1' '2' '3' ~])
257 {'1' '3' '2' 'e' 'd' 'a' 'c' 'b'}
259------------------------------------------------------------------------
261### `+-has:in`
263b in a?
265Checks if `b` is an element of `a`, producing a boolean.
267Accepts
268-------
270`a` is a [`++set`]().
272`b` is a [noun]().
274Produces
275--------
277A boolean.
279Source
280------
282 +- has :: b exists in a check
283 ~/ %has
284 |* b/*
285 |- ^- ?
286 ?~ a
287 |
288 ?: =(b n.a)
289 &
290 ?: (hor b n.a)
291 $(a l.a)
292 $(a r.a)
293 ::
296Examples
297--------
299 > =a (~(gas in `(set @t)`~) `(list @t)`[`a` `b` `c` ~])
300 > (~(has in a) `a`)
301 %.y
302 > (~(has in a) 'z')
303 %.n
305------------------------------------------------------------------------
307### `+-int:in`
309Intersection
311Produces a set of the intersection between two `++set`s of the same type,
312`a` and `b`.
314Accepts
315-------
317`a` is a set.
319`b` is a set.
321Produces
322--------
324A `++set`.
326Source
327------
329 +- int :: intersection
330 ~/ %int
331 |* b/_a
332 |- ^+ a
333 ?~ b
334 ~
335 ?~ a
336 ~
337 ?. (vor n.a n.b)
338 $(a b, b a)
339 ?: =(n.b n.a)
340 [n.a $(a l.a, b l.b) $(a r.a, b r.b)]
341 ?: (hor n.b n.a)
342 %- uni(a $(a l.a, b [n.b l.b ~])) $(b r.b)
343 %- uni(a $(a r.a, b [n.b ~ r.b])) $(b l.b)
344 ::
348Examples
349--------
351 > (~(int in (sa "ac")) (sa "ha"))
352 {~~a}
353 > (~(int in (sa "acmo")) ~)
354 {}
355 > (~(int in (sa "acmo")) (sa "ham"))
356 {~~a ~~m}
357 > (~(int in (sa "acmo")) (sa "lep"))
358 {}
360------------------------------------------------------------------------
362### `+-put:in`
364Put b in a
366Add an element `b` to the `++set` `a`.
368Accepts
369-------
371`a` is a set.
373`b` is a noun.
375Produces
376--------
378A `++set`.
380Source
381------
383 +- put :: puts b in a, sorted
384 ~/ %put
385 |* b/*
386 |- ^+ a
387 ?~ a
388 [b ~ ~]
389 ?: =(b n.a)
390 a
391 ?: (hor b n.a)
392 =+ c=$(a l.a)
393 ?> ?=(^ c)
394 ?: (vor n.a n.c)
395 [n.a c r.a]
396 [n.c l.c [n.a r.c r.a]]
397 =+ c=$(a r.a)
398 ?> ?=(^ c)
399 ?: (vor n.a n.c)
400 [n.a l.a c]
401 [n.c [n.a l.a l.c] r.c]
402 ::
405Examples
406--------
408 > =a (~(gas in `(set @t)`~) `(list @t)`[`a` `b` `c` ~])
409 > =b (~(put in a) `d`)
410 > b
411 {`d` `a` `c` `b`}
412 > -.l.+.b
413 n=`d`
415------------------------------------------------------------------------
417### `+-rep:in`
419Accumulate
421Accumulate the elements of `a` using a gate `c` and an accumulator `b`.
423Accepts
424--------
426`a` is a `++set`.
428`b` is a noun.
430`c` is a gate.
432Produces
433--------
435A noun.
437Source
438------
440 +- rep :: replace by product
441 |* b/_|=({* *} +<+)
442 |-
443 ?~ a +<+.b
444 $(a r.a, +<+.b $(a l.a, +<+.b (b n.a +<+.b)))
448Examples
449--------
451 > =a (~(gas in *(set @)) [1 2 3 ~])
452 > a
453 {1 3 2}
454 > (~(rep in a) 0 |=([a/@ b/@] (add a b)))
455 6
457------------------------------------------------------------------------
459### `+-tap:in`
461Set to list
463Flattens the `++set` `a` into a `++list`.
465Accepts
466-------
468`a` is an set.
470Produces
471--------
473A list.
475Source
476------
478 +- tap :: convert to list
479 ~/ %tap
480 |= b/(list _?>(?=(^ a) n.a))
481 ^+ b
482 ?~ a
483 b
484 $(a r.a b [n.a $(a l.a)])
485 ::
489Examples
490--------
492 > =s (sa `(list @t)`['a' 'b' 'c' 'd' 'e' ~])
493 > s
494 {'e' 'd' 'a' 'c' 'b'}
495 > (~(tap in s) `(list @t)`['1' '2' '3' ~])
496 ~['b' 'c' 'a' 'd' 'e' '1' '2' '3']
497 > b
498 {'bonita' 'madeleine' 'daniel' 'john'}
499 ~zod/try=> (~(tap in b) `(list ,@t)`['david' 'people' ~])
500 ~['john' 'daniel' 'madeleine' 'bonita' 'david' 'people']
502------------------------------------------------------------------------
504### `+-uni:in`
506Union
508Produces a set of the union between two [`++set`]()s of the same type, `a` and
509`b`.
511Accepts
512-------
514`a` is a set.
516`b` is a set.
518Produces
519--------
521A set.
523Source
524------
526 +- uni :: union
527 ~/ %uni
528 |* b/_a
529 ?: =(a b) a
530 |- ^+ a
531 ?~ b
532 a
533 ?~ a
534 b
535 ?: (vor n.a n.b)
536 ?: =(n.b n.a)
537 [n.b $(a l.a, b l.b) $(a r.a, b r.b)]
538 ?: (hor n.b n.a)
539 $(a [n.a $(a l.a, b [n.b l.b ~]) r.a], b r.b)
540 $(a [n.a l.a $(a r.a, b [n.b ~ r.b])], b l.b)
541 ?: =(n.a n.b)
542 [n.b $(b l.b, a l.a) $(b r.b, a r.a)]
543 ?: (hor n.a n.b)
544 $(b [n.b $(b l.b, a [n.a l.a ~]) r.b], a r.a)
545 $(b [n.b l.b $(b r.b, a [n.a ~ r.a])], a l.a)
546 ::
549Examples
550--------
552 > (~(uni in (sa "ac")) (sa "ha"))
553 {~~a ~~c ~~h}
554 > (~(uni in (sa "acmo")) ~)
555 {~~a ~~c ~~m ~~o}
556 > (~(uni in (sa "acmo")) (sa "ham"))
557 {~~a ~~c ~~m ~~o ~~h}
558 > (~(uni in (sa "acmo")) (sa "lep"))
559 {~~e ~~a ~~c ~~m ~~l ~~o ~~p}
561------------------------------------------------------------------------
563### `+-wyt:in`
565Set size
567Produce the number of elements in [`++set`]() `a` as an atom.
569Accepts
570-------
572`a` is an set.
574Produces
575--------
577An atom.
579Source
580------
582 +- wyt :: size of set
583 |- ^- @
584 ?~(a 0 +((add $(a l.a) $(a r.a))))
585 --
589Examples
590--------
592 > =a (~(put in (~(put in (sa)) 'a')) 'b')
593 > ~(wyt in a)
594 2
595 > b
596 {'bonita' 'madeleine' 'daniel' 'john'}
597 > ~(wyt in b)
598 4
601***