urbit/base/pub/doc/hoon/runes/wt/wthp.md
Anton Dyudin 6cbb6b060d Revert "remove docs for demo", "remove odds and ends", "demo network", "DEMO ONLY: root beak as %demo.", "DEMO ONLY: don't show doznec flapping.", "Prinrtf."
This reverts commit 8e1e40d75b3ab15c194b6bf9570f3edc46e2de58.
This reverts commit f073c490f9fd7c5abc033af4857df92229877de7.
This reverts commit f187d2d7e01a54823f3e979af9bbd148b398e7e9.
This reverts commit bc272862a73cfce1b118586ca39d3a377d841f1b.
This reverts commit 30a397513f8890a3406dc7ab91c6e067e3bbfbbb.
This reverts commit 4fc6856fb50d88c20a0f533392ca606641c5f38f.

Conflicts:
	urb/urbit.pill
	urb/zod/base/lib/drum.hoon
2015-06-15 18:10:02 -07:00

100 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[wuthep, `?-`, %wthp](#wthp)
============================
Switch
`?-` is a synthetic hoon that selects a case in `q` for the value of
`p`. The labels in `q` must match the [icon]() of `p`. The list of
cases, `q` must be terminated by `==`.
See also
--------
[wutlus, `?+`, %wtls](#wtls)
============================
Produces
--------
Twig: `[%wthp p=wing q=tine]`
Sample
------
`p` is a [`++wine`](). `q` is a [`++tine`]().
Tall form
---------
Kingside:
?- p
p.i.q q.i.q
p.i.t.q q.i.t.q
p.i.t.t.q q.i.t.t.q
==
Queenside:
?- p
p.i.q
q.i.q
p.i.t.q
q.i.t.q
p.i.t.t.q
q.i.t.t.q
==
Wide form
---------
?-(p p.i.q q.i.q, p.i.t.q q.i.t.q, p.i.t.t.q q.i.t.t.q)
Irregular form
--------------
None
Examples
--------
~zod/try=>
=cor |= typ=$?(%a %b)
?- typ
%a 1
%b 2
==
new var %cor
~zod/try=>
(cor %a)
1
~zod/try=>
(cor %b)
2
Here is a simple example of `?-` showing that its input must have a well
defined type for which all of the cases are covered. We create a core,
`cor` that takes an input `typ` which must be either `%a` or `%b` with
[`$%`](). Calling `cor` with valid arguments selects one of our cases.
~zod/try=>
?- 'a'
%a 0
%b 1
==
! /~zod/try/~2014.11.2..16.56.40..fca2:<[1 1].[4 7]>
! -lost.@t
! mint-lost
~zod/try=>
?- (?(%a %b) 0)
%a 'a'
%b 'b'
==
'b'
Here we can see a common failure case with `?-`. In the first example
all of our possible input cases are not covered when we pass in a `@t`,
so we fail with `mint-vain` a parsing error. When we construct a well
typed input and select a case from it `?-` in fact has all of the cases
covered and produces correct output.