on 8564483 help sign in
606 lines 10 kB history raw
1---
2navhome: /docs
3---
6# 2h: set logic
8### `++in`
10Set operations
12Core whose arms contain a variety of functions that operate on `++set`s. Its sample accepts the input `++set` to be manipulated.
14Accepts
15-------
17A `++set`.
19Source
20------
22 ++ in :: set engine
23 ~/ %in
24 |_ a/(set)
26Examples
27--------
29 > ~(. in (sa "asd"))
30 <13.evb [nlr(^$1{@tD $1}) <414.fvk 101.jzo 1.ypj %164>]>
32### `+-all:in`
34Logical AND
36Computes the logical AND on every element in `a` slammed with `b`,
37producing a boolean.
39Accepts
40-------
42`a` is a `++set`.
44`b` is a wet gate that accepts a noun and produces a boolean.
46Produces
47--------
49A boolean.
51Source
52------
54 +- all :: logical AND
55 ~/ %all
56 |* b/$-(* ?)
57 |- ^- ?
58 ?~ a
59 &
60 ?&((b n.a) $(a l.a) $(a r.a))
63Examples
64--------
66 > =b (sa `(list [@t *])`[['a' 1] ['b' [2 3]] ~])
67 > (~(all in b) |=(a/* ?@(+.a & |)))
68 %.n
69 > =b (sa `(list @t)`['john' 'bonita' 'daniel' 'madeleine' ~])
70 > (~(all in b) |=(a/@t (gte a 100)))
71 %.y
73------------------------------------------------------------------------
75### `+-any:in`
77Logical OR
79Computes the logical OR on every element of `a` slammed with `b`.
81Accepts
82-------
84`a` is a `++set`.
86`b` is a gate that accepts a noun and produces a boolean.
88Produces
89--------
91A boolean.
93Source
94------
96 +- any :: logical OR
97 ~/ %any
98 |* b/$-(* ?)
99 |- ^- ?
100 ?~ a
101 |
102 ?|((b n.a) $(a l.a) $(a r.a))
103 ::
106Examples
107--------
109 > =b (sa `(list [@t *])`[['a' 1] ['b' [2 3]] ~])
110 > (~(any in b) |=(a/* ?@(+.a & |)))
111 %.y
112 > =b (sa `(list @t)`['john' 'bonita' 'daniel' 'madeleine' ~])
113 > (~(any in b) |=(a/@t (lte a 100)))
114 %.n
116------------------------------------------------------------------------
118### `+-del:in`
120Remove noun
122Removes `b` from the `++set` `a`.
124Accepts
125-------
127`a` is a set.
129`b` is a noun.
131Produces
132--------
134A set.
136Source
137------
139 +- del :: b without any a
140 ~/ %del
141 |* b/*
142 |- ^+ a
143 ?~ a
144 ~
145 ?. =(b n.a)
146 ?: (hor b n.a)
147 [n.a $(a l.a) r.a]
148 [n.a l.a $(a r.a)]
149 |- ^- {$?($~ _a)}
150 ?~ l.a r.a
151 ?~ r.a l.a
152 ?: (vor n.l.a n.r.a)
153 [n.l.a l.l.a $(l.a r.l.a)]
154 [n.r.a $(r.a l.r.a) r.r.a]
155 ::
158Examples
159--------
161 > =b (sa `(list @t)`['a' 'b' 'c' ~])
162 > (~(del in b) 'a')
163 {'c' 'b'}
164 > =b (sa `(list @t)`['john' 'bonita' 'daniel' 'madeleine' ~])
165 > (~(del in b) 'john')
166 {'bonita' 'madeleine' 'daniel'}
167 > (~(del in b) 'susan')
168 {'bonita' 'madeleine' 'daniel' 'john'}
170------------------------------------------------------------------------
172### `+-dig:in`
174Axis a in b
176Produce the axis of `b` within `a`.
178Accepts
179-------
181`a` is a `++set`.
183`b` is a noun.
185Produces
186--------
188The `++unit` of an atom.
190Source
191------
193 +- dig :: axis of a in b
194 |= b/*
195 =+ c=1
196 |- ^- (unit @)
197 ?~ a ~
198 ?: =(b n.a) [~ u=(peg c 2)]
199 ?: (hor b n.a)
200 $(a l.a, c (peg c 6))
201 $(a r.a, c (peg c 7))
202 ::
206Examples
207--------
209 > =a (sa `(list @)`[1 2 3 4 5 6 7 ~])
210 > a
211 {5 4 7 6 1 3 2}
212 > -.a
213 n=6
214 > (~(dig in a) 7)
215 [~ 12]
216 > (~(dig in a) 2)
217 [~ 14]
218 > (~(dig in a) 6)
219 [~ 2]
221------------------------------------------------------------------------
223### `+-gas:in`
225Concatenate
227Insert the elements of a `++list` `b` into a `++set` `a`.
229Accepts
230-------
232`a` is a set.
234`b` is a list.
236Produces
237--------
239A `++set`.
241Source
242------
244 +- gas :: concatenate
245 ~/ %gas
246 |= b/(list _?>(?=(^ a) n.a))
247 |- ^+ a
248 ?~ b
249 a
250 $(b t.b, a (put i.b))
251 ::
254Examples
255--------
257 > b
258 {'bonita' 'madeleine' 'rudolf' 'john'}
259 > (~(gas in b) `(list @t)`['14' 'things' 'number' '1.337' ~])
260 {'1.337' '14' 'number' 'things' 'bonita' 'madeleine' 'rudolf' 'john'}
261 > (~(gas in s) `(list ,@t)`['1' '2' '3' ~])
262 {'1' '3' '2' 'e' 'd' 'a' 'c' 'b'}
264------------------------------------------------------------------------
266### `+-has:in`
268b in a?
270Checks if `b` is an element of `a`, producing a boolean.
272Accepts
273-------
275`a` is a [`++set`]().
277`b` is a [noun]().
279Produces
280--------
282A boolean.
284Source
285------
287 +- has :: b exists in a check
288 ~/ %has
289 |* b/*
290 |- ^- ?
291 ?~ a
292 |
293 ?: =(b n.a)
294 &
295 ?: (hor b n.a)
296 $(a l.a)
297 $(a r.a)
298 ::
301Examples
302--------
304 > =a (~(gas in `(set @t)`~) `(list @t)`[`a` `b` `c` ~])
305 > (~(has in a) `a`)
306 %.y
307 > (~(has in a) 'z')
308 %.n
310------------------------------------------------------------------------
312### `+-int:in`
314Intersection
316Produces a set of the intersection between two `++set`s of the same type,
317`a` and `b`.
319Accepts
320-------
322`a` is a set.
324`b` is a set.
326Produces
327--------
329A `++set`.
331Source
332------
334 +- int :: intersection
335 ~/ %int
336 |* b/_a
337 |- ^+ a
338 ?~ b
339 ~
340 ?~ a
341 ~
342 ?. (vor n.a n.b)
343 $(a b, b a)
344 ?: =(n.b n.a)
345 [n.a $(a l.a, b l.b) $(a r.a, b r.b)]
346 ?: (hor n.b n.a)
347 %- uni(a $(a l.a, b [n.b l.b ~])) $(b r.b)
348 %- uni(a $(a r.a, b [n.b ~ r.b])) $(b l.b)
349 ::
353Examples
354--------
356 > (~(int in (sa "ac")) (sa "ha"))
357 {~~a}
358 > (~(int in (sa "acmo")) ~)
359 {}
360 > (~(int in (sa "acmo")) (sa "ham"))
361 {~~a ~~m}
362 > (~(int in (sa "acmo")) (sa "lep"))
363 {}
365------------------------------------------------------------------------
367### `+-put:in`
369Put b in a
371Add an element `b` to the `++set` `a`.
373Accepts
374-------
376`a` is a set.
378`b` is a noun.
380Produces
381--------
383A `++set`.
385Source
386------
388 +- put :: puts b in a, sorted
389 ~/ %put
390 |* b/*
391 |- ^+ a
392 ?~ a
393 [b ~ ~]
394 ?: =(b n.a)
395 a
396 ?: (hor b n.a)
397 =+ c=$(a l.a)
398 ?> ?=(^ c)
399 ?: (vor n.a n.c)
400 [n.a c r.a]
401 [n.c l.c [n.a r.c r.a]]
402 =+ c=$(a r.a)
403 ?> ?=(^ c)
404 ?: (vor n.a n.c)
405 [n.a l.a c]
406 [n.c [n.a l.a l.c] r.c]
407 ::
410Examples
411--------
413 > =a (~(gas in `(set @t)`~) `(list @t)`[`a` `b` `c` ~])
414 > =b (~(put in a) `d`)
415 > b
416 {`d` `a` `c` `b`}
417 > -.l.+.b
418 n=`d`
420------------------------------------------------------------------------
422### `+-rep:in`
424Accumulate
426Accumulate the elements of `a` using a gate `c` and an accumulator `b`.
428Accepts
429--------
431`a` is a `++set`.
433`b` is a noun.
435`c` is a gate.
437Produces
438--------
440A noun.
442Source
443------
445 +- rep :: replace by product
446 |* b/_|=({* *} +<+)
447 |-
448 ?~ a +<+.b
449 $(a r.a, +<+.b $(a l.a, +<+.b (b n.a +<+.b)))
453Examples
454--------
456 > =a (~(gas in *(set @)) [1 2 3 ~])
457 > a
458 {1 3 2}
459 > (~(rep in a) 0 |=([a/@ b/@] (add a b)))
460 6
462------------------------------------------------------------------------
464### `+-tap:in`
466Set to list
468Flattens the `++set` `a` into a `++list`.
470Accepts
471-------
473`a` is an set.
475Produces
476--------
478A list.
480Source
481------
483 +- tap :: convert to list
484 ~/ %tap
485 |= b/(list _?>(?=(^ a) n.a))
486 ^+ b
487 ?~ a
488 b
489 $(a r.a b [n.a $(a l.a)])
490 ::
494Examples
495--------
497 > =s (sa `(list @t)`['a' 'b' 'c' 'd' 'e' ~])
498 > s
499 {'e' 'd' 'a' 'c' 'b'}
500 > (~(tap in s) `(list @t)`['1' '2' '3' ~])
501 ~['b' 'c' 'a' 'd' 'e' '1' '2' '3']
502 > b
503 {'bonita' 'madeleine' 'daniel' 'john'}
504 ~zod/try=> (~(tap in b) `(list ,@t)`['david' 'people' ~])
505 ~['john' 'daniel' 'madeleine' 'bonita' 'david' 'people']
507------------------------------------------------------------------------
509### `+-uni:in`
511Union
513Produces a set of the union between two [`++set`]()s of the same type, `a` and
514`b`.
516Accepts
517-------
519`a` is a set.
521`b` is a set.
523Produces
524--------
526A set.
528Source
529------
531 +- uni :: union
532 ~/ %uni
533 |* b/_a
534 ?: =(a b) a
535 |- ^+ a
536 ?~ b
537 a
538 ?~ a
539 b
540 ?: (vor n.a n.b)
541 ?: =(n.b n.a)
542 [n.b $(a l.a, b l.b) $(a r.a, b r.b)]
543 ?: (hor n.b n.a)
544 $(a [n.a $(a l.a, b [n.b l.b ~]) r.a], b r.b)
545 $(a [n.a l.a $(a r.a, b [n.b ~ r.b])], b l.b)
546 ?: =(n.a n.b)
547 [n.b $(b l.b, a l.a) $(b r.b, a r.a)]
548 ?: (hor n.a n.b)
549 $(b [n.b $(b l.b, a [n.a l.a ~]) r.b], a r.a)
550 $(b [n.b l.b $(b r.b, a [n.a ~ r.a])], a l.a)
551 ::
554Examples
555--------
557 > (~(uni in (sa "ac")) (sa "ha"))
558 {~~a ~~c ~~h}
559 > (~(uni in (sa "acmo")) ~)
560 {~~a ~~c ~~m ~~o}
561 > (~(uni in (sa "acmo")) (sa "ham"))
562 {~~a ~~c ~~m ~~o ~~h}
563 > (~(uni in (sa "acmo")) (sa "lep"))
564 {~~e ~~a ~~c ~~m ~~l ~~o ~~p}
566------------------------------------------------------------------------
568### `+-wyt:in`
570Set size
572Produce the number of elements in [`++set`]() `a` as an atom.
574Accepts
575-------
577`a` is an set.
579Produces
580--------
582An atom.
584Source
585------
587 +- wyt :: size of set
588 |- ^- @
589 ?~(a 0 +((add $(a l.a) $(a r.a))))
590 --
594Examples
595--------
597 > =a (~(put in (~(put in (sa)) 'a')) 'b')
598 > ~(wyt in a)
599 2
600 > b
601 {'bonita' 'madeleine' 'daniel' 'john'}
602 > ~(wyt in b)
603 4
606***