mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-20 13:22:07 +03:00
72 lines
1.6 KiB
Markdown
72 lines
1.6 KiB
Markdown
[bartis, `|=`, %brts](#brts)
|
|
============================
|
|
|
|
Dry gate
|
|
|
|
`|=`, is a synthetic rune that produces a [dry]() [`%gold`]() gate with
|
|
sample [`$*(p)`](), arm `q`. A gate is a core with one arm, [`$`](), the
|
|
empty name. `|=` checks its input sample against its tile, `p`.
|
|
|
|
`|=` is similar to a function that takes a defined input and produces
|
|
the result of some computation. `|=` differs from `|*` in that its
|
|
typechecking occurs at compile-time to ensure that all inputs match its
|
|
sample tile.
|
|
|
|
See also
|
|
--------
|
|
|
|
[bartar, `|*`, %brtr](#brtr)
|
|
============================
|
|
|
|
Produces
|
|
--------
|
|
|
|
Twig: `[%brts p=tile q=twig]`
|
|
|
|
Sample
|
|
------
|
|
|
|
`p` is a [tile](). `q` is a [twig]().
|
|
|
|
Tall form
|
|
---------
|
|
|
|
|= p
|
|
q
|
|
|
|
Wide form
|
|
---------
|
|
|
|
|=(p q)
|
|
|
|
Irregular form
|
|
--------------
|
|
|
|
None
|
|
|
|
Examples
|
|
--------
|
|
|
|
~zod/try=> =inc |=(a=@ +(a))
|
|
~zod/try=> (inc 20)
|
|
21
|
|
|
|
Here we create a very simple gate that increments its sample, `a`. You
|
|
can think of `|=` as similar to a straightforward function that takes
|
|
arguments.
|
|
|
|
++ add :: add
|
|
~/ %add
|
|
|= [a=@ b=@]
|
|
^- @
|
|
?: =(0 a)
|
|
b
|
|
$(a (dec a), b +(b))
|
|
|
|
In [++add](), from `hoon.hoon`, `|=` creates a gate whose sample takes
|
|
two atoms labeled `a` and `b`, and whose arm evaluates an expression
|
|
that produces the sum of the atoms by decrementing `a` until it is `0`
|
|
and incrementing `b` at each step. Here, `$` is used for recursion,
|
|
calling the gate produced by `|=` with `a` replaced by `(dec a)` and `b`
|
|
replaced by `+(b)`.
|