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
1.9 KiB
wuthep, ?-
, %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
Produces
Twig: [%wthp p=wing q=tine]
Sample
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.