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

1.9 KiB
Raw Blame History

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

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.