mirror of
https://github.com/urbit/ares.git
synced 2024-11-25 22:29:57 +03:00
133 lines
3.1 KiB
Plaintext
133 lines
3.1 KiB
Plaintext
/- *sock
|
|
/+ ska
|
|
|%
|
|
:: mask axes in a noun to make a sock
|
|
++ dope
|
|
|= [mask=(list @) non=noun]
|
|
^- boot
|
|
=/ sack=boot [%safe %know non]
|
|
|-
|
|
^- boot
|
|
?~ mask sack
|
|
$(sack (welt:ska i.mask [%safe %toss ~] sack), mask t.mask)
|
|
:: turn a hoon type into a boot
|
|
++ wove
|
|
|= kine=type
|
|
^- boot
|
|
=| gil=(set type)
|
|
?@ kine
|
|
?- kine
|
|
%noun [%risk %toss ~]
|
|
%void [%boom ~]
|
|
==
|
|
?- -.kine
|
|
%atom
|
|
?~ q.kine
|
|
[%risk %dice ~]
|
|
[%risk %know u.q.kine]
|
|
::
|
|
%cell
|
|
(cobb:ska $(kine p.kine) $(kine q.kine))
|
|
::
|
|
%core
|
|
%+ cobb:ska
|
|
(spry p.r.q.kine) :: compiled battery
|
|
$(kine p.kine) :: current payload
|
|
::
|
|
%face
|
|
$(kine q.kine)
|
|
::
|
|
%fork
|
|
=/ tins ~(tap in p.kine)
|
|
?~ tins [%boom ~]
|
|
=/ hypo $(kine i.tins)
|
|
=/ tons t.tins
|
|
|-
|
|
^- boot
|
|
?~ tons hypo
|
|
$(hypo (gnaw:ska ^$(kine i.tons) hypo), tons t.tons)
|
|
::
|
|
%hint
|
|
$(kine q.kine)
|
|
::
|
|
%hold
|
|
?: (~(has in gil) kine)
|
|
[%risk %toss ~]
|
|
$(gil (~(put in gil) kine), kine ~(repo ut kine))
|
|
==
|
|
:: turn a seminoun into a sock
|
|
++ spry
|
|
|= seminoun
|
|
^- boot
|
|
?- -.mask
|
|
%half
|
|
?> ?=(^ data)
|
|
(cobb:ska $(mask left.mask, data -.data) $(mask rite.mask, data +.data))
|
|
::
|
|
%full
|
|
?~ blocks.mask
|
|
[%risk %know data]
|
|
[%risk %toss ~]
|
|
::
|
|
%lazy
|
|
[%risk %toss ~]
|
|
==
|
|
:: for a stateful core, figure out what we can assume across all state
|
|
:: transitions
|
|
::
|
|
:: step is a list of arm axes and result axes which are expected to produce gates
|
|
:: the gates will be simul-slammed with %toss
|
|
:: then the result axis will be intersected with the stateful core
|
|
:: knowledge
|
|
::
|
|
:: fixed point termination argument: we can only know the same or less
|
|
:: than what we knew last time (intersection cannot add knowledge)
|
|
:: if we know the same, we stop now. We can only subtract finitely many
|
|
:: axes of knowledge from the tree before we know [%boom ~] or
|
|
:: [%risk %toss ~] at which point we will learn the same thing twice
|
|
:: and terminate
|
|
++ arid
|
|
|= [muck=boot step=(list [@ @])]
|
|
^- boot
|
|
=/ yuck muck
|
|
=/ stop step
|
|
?: ?=(%boom -.muck)
|
|
[%boom ~]
|
|
|-
|
|
^- boot
|
|
?~ stop
|
|
?: =(yuck muck)
|
|
yuck
|
|
^$(muck yuck)
|
|
=/ erm (yank:ska -.i.stop muck)
|
|
?: ?=(%boom -.erm)
|
|
$(stop t.stop, yuck (gnaw:ska [%boom ~] yuck))
|
|
=/ arm (trip:ska erm)
|
|
?~ arm
|
|
$(stop t.stop, yuck (gnaw:ska [%risk %toss ~] yuck))
|
|
=/ cor
|
|
?- -.muck
|
|
%safe sure.muck
|
|
%risk hope.muck
|
|
==
|
|
=/ mat (wash:ska cor u.arm)
|
|
?: ?=(%boom -.mat)
|
|
$(stop t.stop, yuck (gnaw:ska [%boom ~] yuck))
|
|
=/ ear (yank:ska 2 mat)
|
|
?: ?=(%boom -.ear)
|
|
$(stop t.stop, yuck (gnaw:ska [%boom ~] yuck))
|
|
=/ gar (trip:ska ear)
|
|
?~ gar
|
|
$(stop t.stop, yuck (gnaw:ska [%risk %toss ~] yuck))
|
|
=/ mar (welt:ska 6 [%risk %toss ~] mat)
|
|
?: ?=(%boom -.mar)
|
|
$(stop t.stop, yuck (gnaw:ska [%boom ~] yuck))
|
|
=/ gor
|
|
?- -.mar
|
|
%safe sure.mar
|
|
%risk hope.mar
|
|
==
|
|
=/ beg (wash:ska gor u.gar)
|
|
$(stop t.stop, yuck (gnaw:ska (yank:ska +.i.stop beg) yuck))
|
|
--
|