shrub/arvo/hoon.hoon

8640 lines
253 KiB
Plaintext
Raw Normal View History

2013-09-29 00:21:18 +04:00
:::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::: :::::: Preface ::::::
:::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
?> ?=(@ .) :: atom subject
%. . :: fun with subject
|= cud=@ :: call it cud
=- ?: =(0 cud) :: if cud is 0
all :: then return engine
(make:all cud) :: else simple compile
^= all :: assemble engine
=~ :: volume stack
2014-01-07 00:37:42 +04:00
%164 :: version constant
2013-09-29 00:21:18 +04:00
:::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::: :::::: volume 0, version stub ::::::
:::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
2014-01-07 00:37:42 +04:00
~% %k.164 ~ ~ ::
2013-09-29 00:21:18 +04:00
|% ::
2014-01-07 00:37:42 +04:00
++ stub 164 :: version stub
2013-09-29 00:21:18 +04:00
-- ::
:::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::: :::::: volume 1, Hoon models ::::::
:::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
~% %mood
+
~
|% ::
2014-01-04 11:28:16 +04:00
++ abel typo :: original sin: type
2013-09-29 00:21:18 +04:00
++ axis ,@ :: tree address
2013-12-23 03:32:30 +04:00
++ also ,[p=term q=wing r=type] :: alias
2014-04-04 14:00:26 +04:00
++ base ?([%atom p=odor] %noun %cell %bean %null) :: axils, @ * ^ ? ~
2014-04-03 05:06:45 +04:00
++ beer $|(@ [~ p=twig]) :: simple embed
++ beet $| @ :: advanced embed
$% [%a p=twig] ::
[%b p=twig] ::
[%c p=twig] ::
[%d p=twig] ::
[%e p=twig q=(list tuna)] ::
== ::
2013-09-29 00:21:18 +04:00
++ bloq ,@ :: blockclass
++ calf ,[p=(map ,@ud wine) q=wine] ::
2014-04-04 14:00:26 +04:00
++ char ,@tD :: UTF-8 byte
++ chum $? lef=term :: jet name
[std=term kel=@] :: kelvin version
[ven=term pro=term kel=@] :: vendor and product
[ven=term pro=term ver=@ kel=@] :: all of the above
2013-09-29 00:21:18 +04:00
== ::
2014-04-04 14:00:26 +04:00
++ claw $% [%ash p=twig] :: XX not used
2013-12-15 11:07:57 +04:00
[%elm p=twig] ::
2013-09-29 00:21:18 +04:00
[%oak ~] ::
[%yew p=(map term claw)] ::
== ::
++ coat ,[p=path q=vase] ::
++ coil $: p=?(%gold %iron %lead %zinc) ::
q=type ::
r=[p=?(~ ^) q=(map term foot)] ::
== ::
++ coin $% [%$ p=dime] ::
[%blob p=*] ::
[%many p=(list coin)] ::
== ::
2014-04-04 14:00:26 +04:00
++ cord ,@t :: text atom (UTF-8)
2013-09-29 00:21:18 +04:00
++ date ,[[a=? y=@ud] m=@ud t=tarp] :: parsed date
++ dime ,[p=@ta q=@] ::
2014-04-04 14:00:26 +04:00
++ dram $% [| p=(map ,@tas dram)] :: simple unix dir
2013-09-29 00:21:18 +04:00
[& p=@ud q=@] ::
== ::
2014-02-10 21:50:20 +04:00
++ each |*([a=$+(* *) b=$+(* *)] $%([& p=a] [| p=b])) ::
2014-04-04 14:00:26 +04:00
++ edge ,[p=hair q=(unit ,[p=* q=nail])] :: parsing output
++ foot $% [%ash p=twig] :: dry arm, geometric
[%elm p=twig] :: wet arm, generic
[%oak ~] :: XX not used
[%yew p=(map term foot)] :: XX not used
2013-09-29 00:21:18 +04:00
== ::
2014-04-04 14:00:26 +04:00
++ gear |* a=_,* :: XX list generator
2013-09-29 00:21:18 +04:00
$_ ::
2013-12-17 08:48:40 +04:00
=| b=* ::
2013-09-29 00:21:18 +04:00
|? ::
?@ b ::
~ ::
[i=(a -.b) t=^?(..$(b +.b))] ::
2014-04-04 14:00:26 +04:00
++ hair ,[p=@ud q=@ud] :: parsing trace
++ hapt (list ,@ta) :: XX not used
2013-12-21 06:35:33 +04:00
++ like |* a=_,* :: generic edge
2013-09-29 00:21:18 +04:00
|= b=_`*`[(hair) ~] ::
:- p=(hair -.b) ::
^= q ::
?@ +.b ~ ::
:- ~ ::
2014-01-27 22:49:26 +04:00
u=[p=(a +>-.b) q=[p=(hair -.b) q=(tape +.b)]] ::
++ limb $|(term $%([%& p=axis] [%| p=@ud q=term])) ::
2014-04-04 14:00:26 +04:00
++ line ,[p=[%leaf p=odor q=@] q=tile] :: %kelp case
++ list |* a=_,* :: null-term list
2013-09-29 00:21:18 +04:00
$|(~ [i=a t=(list a)]) ::
2014-04-03 05:06:45 +04:00
++ mane $|(@tas [@tas @tas]) :: XML name/space
++ mano ,[g=marx c=marl] :: normalized manx
++ manx $|(@tas [t=marx c=marl]) :: XML node
++ marl (list manx) :: XML node list
++ mars ,[t=[n=%$ a=[i=[n=%$ v=tape] t=~]] c=~] :: XML cdata
++ mart (list ,[n=mane v=tape]) :: XML attributes
++ marx $|(@tas [n=mane a=mart]) :: XML tag
2014-04-04 14:00:26 +04:00
++ metl ?(%gold %iron %zinc %lead) :: core variance
++ odor ,@ta :: atom format
2013-09-29 00:21:18 +04:00
++ tarp ,[d=@ud h=@ud m=@ud s=@ud f=(list ,@ux)] :: parsed time
++ time ,@da :: galactic time
2013-12-21 06:35:33 +04:00
++ tree |* a=_,* :: binary tree
2013-09-29 00:21:18 +04:00
$|(~ [n=a l=(tree a) r=(tree a)]) ::
2014-04-04 14:00:26 +04:00
++ nail ,[p=hair q=tape] :: parsing input
2014-01-27 22:49:26 +04:00
++ numb ,@ :: just a number
++ pass ,@ :: public key
2014-04-04 14:00:26 +04:00
++ path (list span) :: filesys location
++ pint ,[p=[p=@ q=@] q=[p=@ q=@]] :: line/column range
2013-09-29 00:21:18 +04:00
++ port $: p=axis ::
2013-12-13 23:21:48 +04:00
$= q ::
2013-12-13 05:44:15 +04:00
$% [%& p=type] ::
[%| p=axis q=(list ,[p=type q=foot])] ::
2013-09-29 00:21:18 +04:00
== ::
== ::
2013-12-31 23:30:37 +04:00
++ post $: p=axis ::
$= q ::
$% [0 p=type] ::
[1 p=axis q=(list ,[p=type q=foot])] ::
[2 p=twin q=type] ::
== ::
== ::
2013-09-29 00:21:18 +04:00
++ prop $: p=axis ::
2013-12-13 23:21:48 +04:00
$= q ::
2013-09-29 00:21:18 +04:00
[p=?(~ axis) q=(list ,[p=type q=foot])] ::
== ::
2014-04-10 00:35:28 +04:00
++ rege $| ?(%dote %ende %sart %empt %boun %bout) :: parsed regex
$% [%lite p=char] :: literal
[%pair p=rege q=rege] :: ordering
[%capt p=rege q=@u] :: capture group
[%brac p=@] :: p is 256 bitmask
[%eith p=rege q=rege] :: either
[%mant p=rege] :: greedy 0 or more
[%plls p=rege] :: greedy 1 or more
[%betw p=rege q=@u r=@u] :: between q and r
[%bint p=rege q=@u] :: min q
[%bant p=rege q=@u] :: exactly q
[%manl p=rege] :: lazy 0 or more
[%plll p=rege] :: lazy 1 or more
[%betl p=rege q=@u r=@u] :: between q and r lazy
[%binl p=rege q=@u] :: min q lazy
== ::
2014-04-04 14:00:26 +04:00
++ ring ,@ :: private key
++ rule |=(tub=nail `edge`[p.tub ~ ~ tub]) :: parsing rule
++ shoe $% [%hunk p=tank] :: XX not used
2013-09-29 00:21:18 +04:00
[%lose p=term] ::
[%mean p=*] ::
[%spot p=spot] ::
== ::
2014-04-04 14:00:26 +04:00
++ span ,@ta :: text-atom (ASCII)
++ spot ,[p=path q=pint] :: range in file
2014-04-04 14:00:26 +04:00
++ tank $% [%leaf p=tape] :: printing formats
2013-12-13 05:44:15 +04:00
[%palm p=[p=tape q=tape r=tape s=tape] q=(list tank)]
[%rose p=[p=tape q=tape r=tape] q=(list tank)]
2013-09-29 00:21:18 +04:00
== ::
2014-04-04 14:00:26 +04:00
++ tape (list char) :: like a string
++ term ,@tas :: Hoon ASCII subset
2014-01-04 06:59:56 +04:00
++ tiki :: test case
$% [& p=(unit term) q=wing] :: simple wing
[| p=(unit term) q=twig] :: named wing
== ::
2013-09-29 00:21:18 +04:00
++ tile $& [p=tile q=tile] :: ordered pair
2013-12-16 22:53:22 +04:00
$% [%axil p=base] :: base type
2013-09-29 00:21:18 +04:00
[%bark p=term q=tile] :: name
2013-12-16 22:53:22 +04:00
[%bush p=tile q=tile] :: pair/tag
2013-09-29 00:21:18 +04:00
[%fern p=[i=tile t=(list tile)]] :: plain selection
2014-01-16 10:43:56 +04:00
[%herb p=twig] :: gate
2013-09-29 00:21:18 +04:00
[%kelp p=[i=line t=(list line)]] :: tag selection
[%leaf p=term q=@] :: constant atom
2013-12-16 22:53:22 +04:00
[%reed p=tile q=tile] :: atom/cell
2013-12-15 11:07:57 +04:00
[%weed p=twig] :: example
== ::
2014-01-16 10:43:56 +04:00
++ toga :: face control
$| p=term :: two togas
$% [0 ~] :: no toga
[1 p=term q=toga] :: deep toga
[2 p=toga q=toga] :: cell toga
== ::
2014-04-03 05:06:45 +04:00
++ tuna :: tagflow
$% [%a p=twig] :: plain text
[%b p=twig] :: single tag
[%c p=twig] :: simple list
[%d p=twig] :: dynamic list
[%e p=twig q=(list tuna)] :: element
[%f p=(list tuna)] :: subflow
== ::
2013-12-15 11:07:57 +04:00
++ twig $& [p=twig q=twig] ::
$% ::
2014-04-04 14:00:26 +04:00
[%$ p=axis] :: blip, empty name
:: ::
2014-04-04 14:00:26 +04:00
[%bccb p=tile] :: bunt a tile
[%bccm p=tile] :: clam a tile
[%bcpt p=wing q=tile] :: whip p into q
[%bctr p=tile] :: static bunt w/ ^~
[%bczp p=base] :: bunt an axil
:: ::
2014-04-04 14:00:26 +04:00
[%brcb p=tile q=(map term foot)] :: %gold tray, sample p
[%brcn p=(map term foot)] :: %gold core, natural
[%brdt p=twig] :: dry %gold trap
[%brfs p=tile q=(map term foot)] :: vulcan. %gold tray
[%brkt p=twig q=(map term foot)] :: %gold book
[%brhp p=twig] :: kick dry %gold trap
[%brls p=tile q=twig] :: dry %iron gate
[%brpt p=tile q=tile r=twig] :: XX not used
[%brtr p=tile q=twig] :: vulcan. wet gate
[%brts p=tile q=twig] :: dry %gold gate
[%brwt p=twig] :: dry %lead trap
:: ::
2014-04-04 14:00:26 +04:00
[%clcb p=twig q=twig] :: [q p]
[%clcn p=tusk] :: [[p ~] ~]
[%clfs p=twig] :: [%$ [%$ p ~] ~]
[%clkt p=twig q=twig r=twig s=twig] :: [p q r s]
[%clhp p=twig q=twig] :: [p q]
[%clls p=twig q=twig r=twig] :: [p q r]
[%clsg p=tusk] :: [p ~]
[%cltr p=tusk] :: p as a tuple
[%clzz p=tusk] :: macro
:: ::
2014-04-04 14:00:26 +04:00
[%cncb p=wing q=tram] :: %=, then cast to p
[%cncl p=twig q=twig] :: pull $.p w/ sample q
[%cndt p=twig q=twig] :: %-(q p)
[%cnhp p=twig q=tusk] :: slam p w/ sample q
[%cntr p=wing q=twig r=tram] ::
2014-04-04 14:00:26 +04:00
[%cnkt p=twig q=twig r=twig s=twig] :: slam p w/ %*(q r s)
[%cnls p=twig q=twig r=twig] :: slam p w/ %*(q r)
2014-04-04 14:00:26 +04:00
[%cnsg p=wing q=twig r=twig] :: pull p from q with r
[%cnts p=wing q=tram] :: eval. p w/ q changes
[%cnzy p=term] :: pulls limb p
[%cnzz p=wing] :: pulls p
2014-04-05 23:04:05 +04:00
:: ::
2014-04-04 14:00:26 +04:00
[%dtkt p=twig] :: Nock 11 data skyhook
[%dtls p=twig] :: Nock 4 increment
[%dtzy p=term q=@] :: atom constant
[%dtzz p=term q=*] :: cubical constant
[%dttr p=twig q=twig] :: nock p w/ formula q
[%dtts p=twig q=twig] :: Nock 5 equality test
[%dtwt p=twig] :: Nock 3 cell test
:: :::::: prettyprinter
[%hxgl p=tusk] :: slam noah w/ !>:*(p)
[%hxgr p=tusk] :: slam cain w/ !>:*(p)
:: :::::: type conversion
[%ktbr p=twig] :: %gold core to %iron
[%ktdt p=twig q=twig] :: cast q to type (p q)
[%ktls p=twig q=twig] :: cast q to p, verify
[%kthp p=tile q=twig] :: cast q to icon of p
[%ktpm p=twig] :: %gold core to %zinc
[%ktsg p=twig] :: p as static constant
[%ktts p=toga q=twig] :: wrap q in toga p
[%ktwt p=twig] :: %gold core to %lead
:: :::::: hints
[%sgbr p=twig q=twig] :: print p if q fails
[%sgcb p=twig q=twig] :: put p in q's trace
[%sgcn p=chum q=twig r=tyre s=twig] :: mark core for jets
[%sgfs p=chum q=twig] :: jet arm in ~% core
[%sggl p=$|(term [p=term q=twig]) q=twig] :: hint p to product q
[%sggr p=$|(term [p=term q=twig]) q=twig] :: hint p to q
[%sgbc p=term q=twig] :: label q, profiling
[%sgls p=@ q=twig] :: cache/memoize
[%sgpm p=@ud q=twig r=twig] :: print q w/priority
[%sgts p=twig q=twig] :: avoid duplication
[%sgwt p=@ud q=twig r=twig s=twig] :: hint iff q is yes
[%sgzp p=twig q=twig] :: type in stacktrace
2014-04-05 23:04:05 +04:00
:: :: miscellaneous
2014-04-04 14:00:26 +04:00
[%smcl p=twig q=tusk] :: binary to n-ary
[%smdt p=twig q=tusk] ::
2014-04-04 14:00:26 +04:00
[%smdq p=(list beer)] :: assemble string
[%smsg p=twig q=tusk] :: gonads
[%smsm p=twig q=twig] :: make sure q is a p
2014-04-05 23:04:05 +04:00
:: :: compositions
2014-04-04 14:00:26 +04:00
[%tsbr p=tile q=twig] :: push bunt: =+(_p q)
[%tscl p=tram q=twig] :: p changes, then q
[%tscn p=twig q=twig] :: XX not used
[%tsdt p=wing q=twig r=twig] :: r with p set to q
[%tsfs p=twig q=twig] :: XX not used
[%tsgl p=twig q=twig] :: =>(q p)
[%tshp p=twig q=twig] :: flip push: =+(q p)
[%tsgr p=twig q=twig] :: use p as .. of q
[%tskt p=twig q=twig r=twig s=twig] :: state machine wing
[%tsls p=twig q=twig] :: push p on .. of q
[%tspm p=tile q=twig] :: XX not used
[%tspt p=tile q=twig] :: XX not used
[%tstr p=term q=wing r=twig] :: make a %bull/alias
[%tssg p=tusk] :: compose twig list
:: :::::: conditionals
[%wtbr p=tusk] :: logical OR
[%wthp p=wing q=tine] :: select case in q
[%wthz p=tiki q=tine] :: tiki %wthp
[%wtcl p=twig q=twig r=twig] :: if p, then q, else r
[%wtdt p=twig q=twig r=twig] :: unless, ?:(p r q)
[%wtkt p=wing q=twig r=twig] :: if p is not its bunt
[%wtkz p=tiki q=twig r=twig] :: tiki %wtkt
[%wtgl p=twig q=twig] :: assert |, ?:(p !! q)
[%wtgr p=twig q=twig] :: assert &, ?:(p q !!)
[%wtls p=wing q=twig r=tine] :: %wthp w/ default
[%wtlz p=tiki q=twig r=tine] :: tiki %wtls
[%wtpm p=tusk] :: logical AND
[%wtpt p=wing q=twig r=twig] :: if p is an atom
[%wtpz p=tiki q=twig r=twig] :: tiki %wtpt
[%wtsg p=wing q=twig r=twig] :: if p is null
[%wtsz p=tiki q=twig r=twig] :: tiki %wtsg
[%wtts p=tile q=wing] :: if q is in tile p
[%wtzp p=twig] :: logical NOT
:: :::::: special
[%zpcb p=spot q=twig] :: debug info in trace
2013-12-15 11:07:57 +04:00
[%zpcm p=twig q=twig] ::
[%zpcn ~] ::
2014-04-04 14:00:26 +04:00
[%zpfs p=twig] :: report .. as error
[%zpgr p=twig] :: vase w/ value p
[%zpsm p=twig q=twig] :: [type noun] pair
[%zpts p=twig] :: Nock formula of p
[%zpwt p=$|(p=@ [p=@ q=@]) q=twig] :: restrict hoon vers.
[%zpzp ~] :: always crash
2013-09-29 00:21:18 +04:00
== ::
2013-12-15 11:07:57 +04:00
++ tine (list ,[p=tile q=twig]) ::
++ tusk (list twig) ::
2013-12-15 13:48:16 +04:00
++ tyre (list ,[p=term q=twig]) ::
2013-12-15 11:07:57 +04:00
++ tyke (list (unit twig)) ::
2014-02-10 21:50:20 +04:00
++ tram (list ,[p=wing q=twig]) ::
2013-12-13 05:44:15 +04:00
++ tone $% [%0 p=*] ::
[%1 p=(list)] ::
[%2 p=(list ,[@ta *])] ::
2013-09-29 00:21:18 +04:00
== ::
2014-04-04 14:00:26 +04:00
:: :::::: virtual nock
++ nock $& [p=nock q=nock] :: autocons
$% [%0 p=@] :: axis select
[%1 p=*] :: constant
[%2 p=nock q=nock] :: compose
[%3 p=nock] :: cell test
[%4 p=nock] :: increment
[%5 p=nock q=nock] :: equality test
[%6 p=nock q=nock r=nock] :: if, then, else
[%7 p=nock q=nock] :: serial compose
[%8 p=nock q=nock] :: push onto subject
[%9 p=@ q=nock] :: select arm and fire
[%10 p=?(@ [p=@ q=nock]) q=nock] :: hint
[%11 p=nock] :: grab data from sky
2013-09-29 00:21:18 +04:00
== ::
2013-12-13 05:44:15 +04:00
++ toon $% [%0 p=*] ::
[%1 p=(list)] ::
[%2 p=(list tank)] ::
2013-09-29 00:21:18 +04:00
== ::
2013-12-13 05:44:15 +04:00
++ tune $% [%0 p=vase] ::
[%1 p=(list)] ::
[%2 p=(list ,[@ta *])] ::
2013-09-29 00:21:18 +04:00
== ::
2014-01-02 00:47:18 +04:00
++ twin ,[p=term q=wing r=axis s=type] ::
++ type $| ?(%noun %void) :: set all or set none
2014-04-04 14:00:26 +04:00
$% [%atom p=term] :: number and format
[%bull p=twin q=type] :: wing synonym
[%cell p=type q=type] :: ordered pair
[%core p=type q=coil] ::
2014-04-04 14:00:26 +04:00
[%cube p=* q=type] :: constant
[%face p=term q=type] :: name
[%fork p=type q=type] :: union/branch
[%hold p=(list ,[p=type q=twig])] :: infinite genrator
2013-09-29 00:21:18 +04:00
== ::
2014-01-27 22:49:26 +04:00
++ typo type :: old type
2013-09-29 00:21:18 +04:00
++ udal :: atomic change (%b)
$: p=@ud :: blockwidth
q=(list ,[p=@ud q=(unit ,[p=@ q=@])]) :: indels
== ::
++ udon :: abstract delta
$: p=umph :: preprocessor
2013-12-13 23:21:48 +04:00
$= q :: patch
2013-09-29 00:21:18 +04:00
$% [%a p=ulna] :: trivial replace
[%b p=udal] :: atomic indel
[%c p=(urge)] :: list indel
[%d p=upas q=upas] :: tree edit
== ::
== ::
++ ulna ,[p=* q=*] :: from to
++ umph :: change filter
$| $? %a :: no filter
%b :: jamfile
%c :: LF text
== ::
$% [%d p=@ud] :: blocklist
== ::
2013-12-21 06:35:33 +04:00
++ unce |* a=_,* :: change part
2013-12-13 05:44:15 +04:00
$%([%& p=@ud] [%| p=(list a) q=(list a)]) ::
2014-03-04 00:39:48 +04:00
++ unit |* a=_,* :: maybe
2013-09-29 00:21:18 +04:00
$|(~ [~ u=a]) ::
++ upas :: tree change (%d)
$& [p=upas q=upas] :: cell
2013-12-13 05:44:15 +04:00
$% [%0 p=axis] :: copy old
[%1 p=*] :: insert new
[%2 p=axis q=udon] :: mutate!
2013-09-29 00:21:18 +04:00
== ::
2013-12-21 06:35:33 +04:00
++ urge |*(a=_,* (list (unce a))) :: list change
2013-09-29 00:21:18 +04:00
++ vase ,[p=type q=*] :: type-value pair
2014-01-04 06:59:56 +04:00
++ vise ,[p=typo q=*] :: old vase
2014-03-12 23:44:08 +04:00
++ wall (list tape) :: text lines (no \n)
++ wain (list cord) :: text lines (no \n)
++ wing (list limb) ::
2013-09-29 00:21:18 +04:00
++ wine $| ?(%noun %path %tank %void %wall %wool %yarn)
$% [%atom p=term] ::
[%core p=(list ,@ta) q=wine] ::
[%face p=term q=wine] ::
[%list p=term q=wine] ::
[%pear p=term q=@] ::
[%pick p=(list wine)] ::
[%plot p=(list wine)] ::
[%stop p=@ud] ::
[%tree p=term q=wine] ::
[%unit p=term q=wine] ::
== ::
++ woof (list $|(@ud [p=@ud q=@ud])) :: udon transform
2013-12-21 06:35:33 +04:00
++ wonk |*(veq=edge ?@(q.veq !! p.u.q.veq)) ::
2013-09-29 00:21:18 +04:00
:: ::
2013-12-21 06:35:33 +04:00
++ map |* [a=_,* b=_,*] :: associative array
2013-09-29 00:21:18 +04:00
$|(~ [n=[p=a q=b] l=(map a b) r=(map a b)]) ::
2013-12-21 06:35:33 +04:00
++ qeu |* a=_,* ::
2013-09-29 00:21:18 +04:00
$|(~ [n=a l=(qeu a) r=(qeu a)]) ::
2013-12-21 06:35:33 +04:00
++ set |* a=_,* ::
2013-09-29 00:21:18 +04:00
$|(~ [n=a l=(set a) r=(set a)]) ::
-- ::
:::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::: :::::: volume 2, Hoon libraries and compiler ::::::
:::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
~% %hoon
+
==
2013-12-27 06:43:25 +04:00
%al al
2013-09-29 00:21:18 +04:00
%ap ap
%ut ut
%seed seed
%show show
==
|%
::::::::::::::::::::::::::::::::::::::::::::::::::::: ::
:::: chapter 2a, basic unsigned math ::::
:: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
++ add :: add
~/ %add
|= [a=@ b=@]
2013-09-29 00:21:18 +04:00
^- @
?: =(0 a)
b
$(a (dec a), b +(b))
::
++ cap :: tree head
~/ %cap
|= a=@
2013-12-14 01:11:26 +04:00
^- ?(%2 %3)
?- a
%2 %2
%3 %3
?(%0 %1) !!
* $(a (div a 2))
2013-09-29 00:21:18 +04:00
==
::
++ dec :: decrement
~/ %dec
|= a=@
~| %decrement-underflow
?< =(0 a)
2013-12-17 08:48:40 +04:00
=+ b=0
2014-01-21 01:50:54 +04:00
|- ^- @
2013-09-29 00:21:18 +04:00
?: =(a +(b))
b
$(b +(b))
::
++ div :: divide
~/ %div
|= [a=@ b=@]
^- @
~| 'div'
?< =(0 b)
2013-12-17 08:48:40 +04:00
=+ c=0
2013-09-29 00:21:18 +04:00
|-
?: (lth a b)
c
$(a (sub a b), c +(c))
::
++ gte :: greater-equal
2013-09-29 00:21:18 +04:00
~/ %gte
|= [a=@ b=@]
^- ?
!(lth a b)
::
++ gth :: greater-than
~/ %gth
|= [a=@ b=@]
^- ?
!(lte a b)
::
++ lte :: less-equal
~/ %lte
|= [a=@ b=@]
|(=(a b) (lth a b))
::
++ lth :: less-than
~/ %lth
|= [a=@ b=@]
^- ?
&(!=(a b) |-(|(=(0 a) &(!=(0 b) $(a (dec a), b (dec b))))))
::
++ mas :: tree body
~/ %mas
|= a=@
^- @
?- a
1 !!
2 1
3 1
* (add (mod a 2) (mul $(a (div a 2)) 2))
==
::
++ max :: maximum
~/ %max
|= [a=@ b=@]
^- @
?: (gth a b)
a
b
::
++ min :: minimum
~/ %min
|= [a=@ b=@]
^- @
?: (lth a b)
a
b
::
++ mod :: remainder
~/ %mod
|= [a=@ b=@]
^- @
?< =(0 b)
(sub a (mul b (div a b)))
::
++ mul :: multiply
~/ %mul
|= [a=@ b=@]
^- @
2013-12-17 08:48:40 +04:00
=+ c=0
2013-09-29 00:21:18 +04:00
|-
?: =(0 a)
c
$(a (dec a), c (add b c))
::
++ peg :: tree connect
~/ %peg
|= [a=@ b=@]
^- @
?- b
1 a
2 (mul a 2)
3 +((mul a 2))
* (add (mod b 2) (mul $(b (div b 2)) 2))
==
::
++ sub :: subtract
~/ %sub
|= [a=@ b=@]
~| %subtract-underflow
^- @
?: =(0 b)
a
$(a (dec a), b (dec b))
:::::::::::::::::::::::::::::::::::::::::::::::::::::: ::
:::: chapter 2b, basic containers ::::
:: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Section 2bA, units ::
::
++ bind :: argue
2013-12-21 06:35:33 +04:00
|* [a=(unit) b=_,*]
2013-09-29 00:21:18 +04:00
?~ a
~
[~ u=(b u.a)]
::
++ clap :: combine
2013-12-21 06:35:33 +04:00
|* [a=(unit) b=(unit) c=_|=(^ +<-)]
2013-09-29 00:21:18 +04:00
?~ a
b
?~ b
a
[~ u=(c u.a u.b)]
::
++ drop :: enlist
2013-12-21 06:35:33 +04:00
|* a=(unit)
2013-09-29 00:21:18 +04:00
?~ a
~
[i=u.a t=~]
::
++ fall :: default
2013-12-21 06:35:33 +04:00
|* [a=(unit) b=*]
2013-09-29 00:21:18 +04:00
?~(a b u.a)
::
++ mate :: choose
2013-12-21 06:35:33 +04:00
|* [a=(unit) b=(unit)]
2013-09-29 00:21:18 +04:00
?~ b
a
?~ a
b
?.(=(u.a u.b) ~|('mate' !!) a)
::
++ need :: demand
2013-12-21 06:35:33 +04:00
|* a=(unit)
2013-09-29 00:21:18 +04:00
?@ a
!!
u.a
::
++ some :: lift
2013-12-21 06:35:33 +04:00
|* a=*
2013-09-29 00:21:18 +04:00
[~ u=a]
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Section 2bB, lists ::
::
++ flop :: reverse
~/ %flop
2013-12-21 06:35:33 +04:00
|* a=(list)
2013-09-29 00:21:18 +04:00
=> .(a (homo a))
^+ a
=+ b=`_a`~
|-
?@ a
b
$(a t.a, b [i.a b])
::
++ homo :: homogenize
2013-12-21 06:35:33 +04:00
|* a=(list)
^+ =< $
|% +- $ ?:(_? ~ [i=(snag 0 a) t=$])
--
2013-09-29 00:21:18 +04:00
a
::
2013-12-21 06:35:33 +04:00
++ limo :: listify
|* a=*
^+ =< $
|% +- $ ?@(a ~ ?:(_? [i=-.a t=$] $(a +.a)))
--
a
::
2013-09-29 00:21:18 +04:00
++ lent :: length
~/ %lent
|= a=(list)
^- @
2013-12-17 08:48:40 +04:00
=+ b=0
2013-09-29 00:21:18 +04:00
|-
?@(a b $(a t.a, b +(b)))
::
++ levy
~/ %levy :: all of
2013-12-21 06:35:33 +04:00
|* [a=(list) b=_|=(p=* .?(p))]
2013-09-29 00:21:18 +04:00
|- ^- ?
?@ a
&
?: (b i.a)
$(a t.a)
|
::
++ lien :: some of
~/ %lien
2013-12-21 06:35:33 +04:00
|* [a=(list) b=$+(* ?)]
2013-09-29 00:21:18 +04:00
|- ^- ?
2013-11-03 05:29:28 +04:00
?~ a |
?: (b i.a) &
2013-09-29 00:21:18 +04:00
$(a t.a)
::
++ reel :: right fold
~/ %reel
2013-12-21 06:35:33 +04:00
|* [a=(list) b=_=|([p=* q=*] |.(q))]
2013-09-29 00:21:18 +04:00
|- ^+ q.b
?@ a
q.b
(b i.a $(a t.a))
::
++ roll :: left fold
~/ %roll
2013-12-21 06:35:33 +04:00
|* [a=(list) b=_=|([p=* q=*] |.(q))]
2013-09-29 00:21:18 +04:00
|-
^+ q.b
?@ a
q.b
$(a t.a, b b(q (b i.a q.b)))
::
++ skid :: separate
2013-12-21 06:35:33 +04:00
|* [a=(list) b=$+(* ?)]
2013-09-29 00:21:18 +04:00
|- ^+ [p=a q=a]
?~ a [~ ~]
=+ c=$(a t.a)
?:((b i.a) [[i.a p.c] q.c] [p.c [i.a q.c]])
::
++ skim :: only
~/ %skim
2013-12-21 06:35:33 +04:00
|* [a=(list) b=_|=(p=* .?(p))]
2013-09-29 00:21:18 +04:00
|-
^+ a
?@ a
~
?:((b i.a) [i.a $(a t.a)] $(a t.a))
::
++ skip :: except
~/ %skip
2013-12-21 06:35:33 +04:00
|* [a=(list) b=_|=(p=* .?(p))]
2013-09-29 00:21:18 +04:00
|-
^+ a
?@ a
~
?:((b i.a) $(a t.a) [i.a $(a t.a)])
::
++ scag :: prefix
2013-12-21 06:35:33 +04:00
|* [a=@ b=(list)]
2013-12-20 21:34:13 +04:00
|- ^+ b
2013-09-29 00:21:18 +04:00
?: |(?=(~ b) =(0 a))
~
[i.b $(b t.b, a (dec a))]
::
2013-09-29 00:21:18 +04:00
++ slag :: suffix
2013-12-21 06:35:33 +04:00
|* [a=@ b=(list)]
2013-12-20 21:34:13 +04:00
|- ^+ b
2013-09-29 00:21:18 +04:00
?: =(0 a)
b
?@ b
~
$(b t.b, a (dec a))
::
++ snag :: index
~/ %snag
2013-12-21 06:35:33 +04:00
|* [a=@ b=(list)]
2013-12-20 21:34:13 +04:00
|-
2013-10-27 07:55:53 +04:00
?~ b
2013-09-29 00:21:18 +04:00
~|('snag-fail' !!)
?: =(0 a)
i.b
$(b t.b, a (dec a))
::
++ sort :: quicksort
~/ %sort
2013-12-24 00:49:15 +04:00
!:
2014-01-21 01:50:54 +04:00
|* [a=(list) b=$+([* *] ?)]
=> .(a ^.(homo a))
2013-09-29 00:21:18 +04:00
|- ^+ a
?~ a ~
%+ weld
$(a (skim t.a |=(c=_i.a (b c i.a))))
2013-12-24 00:49:15 +04:00
^+ t.a
2013-09-29 00:21:18 +04:00
[i.a $(a (skim t.a |=(c=_i.a !(b c i.a))))]
::
++ swag :: infix
2013-12-21 06:35:33 +04:00
|* [[a=@ b=@] c=(list)]
2013-09-29 00:21:18 +04:00
(scag b (slag a c))
::
++ turn :: transform
~/ %turn
2013-12-21 06:35:33 +04:00
|* [a=(list) b=_,*]
2013-09-29 00:21:18 +04:00
|-
?@ a
~
[i=(b i.a) t=$(a t.a)]
::
++ weld :: concatenate
~/ %weld
2013-12-21 06:35:33 +04:00
|* [a=(list) b=(list)]
2014-01-21 01:50:54 +04:00
=> .(a ^.(homo a), b ^.(homo b))
|- ^+ b
?~ a b
2013-09-29 00:21:18 +04:00
[i.a $(a t.a)]
2014-01-21 01:50:54 +04:00
::
2014-04-03 05:06:45 +04:00
++ welp :: perfect weld
=| [* *]
|%
+- $
?~ +<-
+<-(. +<+)
+<-(+ $(+<- +<->))
--
::
2014-01-21 01:50:54 +04:00
++ wild :: concatenate
|* [a=(list) b=(list)]
=> .(a ^.(homo a), b ^.(homo b))
|-
?~ a b
[i=i.a $(a t.a)]
2014-03-08 04:31:36 +04:00
::
++ zing :: promote
|* a=(list (list))
^+ ?>(?=(^ a) (homo i.a))
|-
?~ a ~
(weld i.a $(a t.a))
2013-09-29 00:21:18 +04:00
:::::::::::::::::::::::::::::::::::::::::::::::::::::: ::
:::: chapter 2c, simple noun surgery ::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2cA, bit surgery ::
::
++ bex :: binary exponent
~/ %bex
|= a=@
^- @
?: =(0 a)
1
(mul 2 $(a (dec a)))
::
++ can :: assemble
~/ %can
|= [a=bloq b=(list ,[p=@ q=@])]
^- @
2013-12-18 05:47:20 +04:00
?~ b
2013-09-29 00:21:18 +04:00
0
(mix (end a p.i.b q.i.b) (lsh a p.i.b $(b t.b)))
::
++ cat :: concatenate
~/ %cat
|= [a=bloq b=@ c=@]
(add (lsh a (met a b) c) b)
::
++ cut :: slice
~/ %cut
|= [a=bloq [b=@ c=@] d=@]
(end a c (rsh a b d))
::
++ end :: tail
~/ %end
|= [a=bloq b=@ c=@]
(mod c (bex (mul (bex a) b)))
::
++ lsh :: left-shift
~/ %lsh
|= [a=bloq b=@ c=@]
(mul (bex (mul (bex a) b)) c)
::
++ met :: measure
~/ %met
|= [a=bloq b=@]
^- @
=+ c=0
|-
?: =(0 b)
c
$(b (rsh a 1 b), c +(c))
::
++ rap :: assemble nonzero
~/ %rap
|= [a=bloq b=(list ,@)]
^- @
?@ b
0
(cat a i.b $(b t.b))
::
++ rep :: assemble single
~/ %rep
|= [a=bloq b=(list ,@)]
^- @
=+ c=0
|-
?@ b
0
(con (lsh a c (end a 1 i.b)) $(c +(c), b t.b))
::
++ rip :: disassemble
~/ %rip
|= [a=bloq b=@]
^- (list ,@)
?: =(0 b)
~
[(end a 1 b) $(b (rsh a 1 b))]
::
++ rsh :: right-shift
~/ %rsh
|= [a=bloq b=@ c=@]
(div c (bex (mul (bex a) b)))
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2cB, bit logic ::
::
++ con :: binary or
~/ %con
|= [a=@ b=@]
=+ [c=0 d=0]
|- ^- @
?: ?&(=(0 a) =(0 b))
d
%= $
a (rsh 0 1 a)
b (rsh 0 1 b)
c +(c)
d (add d (lsh 0 c ?&(=(0 (end 0 1 a)) =(0 (end 0 1 b)))))
==
::
++ dis :: binary and
~/ %dis
|= [a=@ b=@]
2013-12-17 08:48:40 +04:00
=| [c=@ d=@]
2013-09-29 00:21:18 +04:00
|- ^- @
?: ?|(=(0 a) =(0 b))
d
%= $
a (rsh 0 1 a)
b (rsh 0 1 b)
c +(c)
d (add d (lsh 0 c ?|(=(0 (end 0 1 a)) =(0 (end 0 1 b)))))
==
::
++ mix :: binary xor
~/ %mix
|= [a=@ b=@]
^- @
=+ [c=0 d=0]
|-
?: ?&(=(0 a) =(0 b))
d
%= $
a (rsh 0 1 a)
b (rsh 0 1 b)
c +(c)
d (add d (lsh 0 c =((end 0 1 a) (end 0 1 b))))
==
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2cC, noun orders ::
::
++ aor :: a-order
~/ %aor
|= [a=* b=*]
^- ?
?: =(a b)
&
?. ?=(@ a)
?. ?=(@ b)
?: =(-.a -.b)
$(a +.a, b +.b)
$(a -.a, b -.b)
|
?. ?=(@ b)
&
|-
=+ [c=(end 3 1 a) d=(end 3 1 b)]
?: =(c d)
$(a (rsh 3 1 a), b (rsh 3 1 b))
2013-09-29 00:21:18 +04:00
(lth c d)
::
2013-09-29 00:21:18 +04:00
++ dor :: d-order
~/ %dor
|= [a=* b=*]
^- ?
?: =(a b)
&
?. ?=(@ a)
?. ?=(@ b)
?: =(-.a -.b)
$(a +.a, b +.b)
2014-03-14 04:49:31 +04:00
$(a -.a, b -.b)
2013-09-29 00:21:18 +04:00
|
?. ?=(@ b)
&
(lth a b)
::
++ gor :: g-order
~/ %gor
|= [a=* b=*]
^- ?
=+ [c=(mug a) d=(mug b)]
?: =(c d)
(dor a b)
(lth c d)
::
++ hor :: h-order
~/ %hor
|= [a=* b=*]
^- ?
?: ?=(@ a)
?: ?=(@ b)
(gor a b)
2013-09-29 00:21:18 +04:00
&
?: ?=(@ b)
|
?: =(-.a -.b)
(gor +.a +.b)
(gor -.a -.b)
::
++ vor :: v-order
~/ %vor
|= [a=* b=*]
^- ?
=+ [c=(mug (mug a)) d=(mug (mug b))]
?: =(c d)
(dor a b)
(lth c d)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2cD, insecure hashing ::
::
++ fnv |=(a=@ (end 5 1 (mul 16.777.619 a))) :: FNV scrambler
++ mug :: 31bit nonzero FNV1a
~/ %mug
|= a=*
?^ a
=+ b=[p=$(a -.a) q=$(a +.a)]
|- ^- @
=+ c=(fnv (mix p.b (fnv q.b)))
=+ d=(mix (rsh 0 31 c) (end 0 31 c))
?. =(0 c) c
$(q.b +(q.b))
=+ b=2.166.136.261
|- ^- @
=+ c=b
=+ [d=0 e=(met 3 a)]
|- ^- @
?: =(d e)
=+ f=(mix (rsh 0 31 c) (end 0 31 c))
?. =(0 f) f
^$(b +(b))
$(c (fnv (mix c (cut 3 [d 1] a))), d +(d))
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2cE, phonetic base ::
::
++ po
~/ %po
2013-09-29 00:21:18 +04:00
=+ :- ^= sis
'dozmarbinwansamlitsighidfidlissogdirwacsabwissib\
/rigsoldopmodfoglidhopdardorlorhodfolrintogsilmir\
/holpaslacrovlivdalsatlibtabhanticpidtorbolfosdot\
/losdilforpilramtirwintadbicdifrocwidbisdasmidlop\
/rilnardapmolsanlocnovsitnidtipsicropwitnatpanmin\
/ritpodmottamtolsavposnapnopsomfinfonbanporworsip\
/ronnorbotwicsocwatdolmagpicdavbidbaltimtasmallig\
/sivtagpadsaldivdactansidfabtarmonranniswolmispal\
/lasdismaprabtobrollatlonnodnavfignomnibpagsopral\
/bilhaddocridmocpacravripfaltodtiltinhapmicfanpat\
/taclabmogsimsonpinlomrictapfirhasbosbatpochactid\
/havsaplindibhosdabbitbarracparloddosbortochilmac\
/tomdigfilfasmithobharmighinradmashalraglagfadtop\
/mophabnilnosmilfopfamdatnoldinhatnacrisfotribhoc\
/nimlarfitwalrapsarnalmoslandondanladdovrivbacpol\
/laptalpitnambonrostonfodponsovnocsorlavmatmipfap'
^= dex
'zodnecbudwessevpersutletfulpensytdurwepserwylsun\
/rypsyxdyrnuphebpeglupdepdysputlughecryttyvsydnex\
/lunmeplutseppesdelsulpedtemledtulmetwenbynhexfeb\
/pyldulhetmevruttylwydtepbesdexsefwycburderneppur\
/rysrebdennutsubpetrulsynregtydsupsemwynrecmegnet\
/secmulnymtevwebsummutnyxrextebfushepbenmuswyxsym\
/selrucdecwexsyrwetdylmynmesdetbetbeltuxtugmyrpel\
/syptermebsetdutdegtexsurfeltudnuxruxrenwytnubmed\
/lytdusnebrumtynseglyxpunresredfunrevrefmectedrus\
/bexlebduxrynnumpyxrygryxfeptyrtustyclegnemfermer\
/tenlusnussyltecmexpubrymtucfyllepdebbermughuttun\
/bylsudpemdevlurdefbusbeprunmelpexdytbyttyplevmyl\
/wedducfurfexnulluclennerlexrupnedlecrydlydfenwel\
/nydhusrelrudneshesfetdesretdunlernyrsebhulryllud\
/remlysfynwerrycsugnysnyllyndyndemluxfedsedbecmun\
/lyrtesmudnytbyrsenwegfyrmurtelreptegpecnelnevfes'
|%
++ ind ~/ %ind
|= a=@
2013-09-29 00:21:18 +04:00
=+ b=0
|- ^- (unit ,@)
?:(=(256 b) ~ ?:(=(a (tod b)) [~ b] $(b +(b))))
++ ins ~/ %ins
|= a=@
2013-09-29 00:21:18 +04:00
=+ b=0
|- ^- (unit ,@)
?:(=(256 b) ~ ?:(=(a (tos b)) [~ b] $(b +(b))))
++ tod ~/(%tod |=(a=@ ?>((lth a 256) (cut 3 [(mul 3 a) 3] dex))))
++ tos ~/(%tos |=(a=@ ?>((lth a 256) (cut 3 [(mul 3 a) 3] sis))))
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2cF, signed and modular ints ::
::
++ si :: signed integer
|%
2014-04-04 14:00:26 +04:00
++ abs |=(a=@s (add (end 0 1 a) (rsh 0 1 a))) :: absolute value
++ dif |= [a=@s b=@s] :: subtraction
(sum a (new !(syn b) (abs b)))
++ dul |= [a=@s b=@] :: modulus
=+(c=(old a) ?:(-.c (mod +.c b) (sub b +.c)))
2014-04-05 23:04:05 +04:00
++ fra |= [a=@s b=@s] :: divide
2013-09-29 00:21:18 +04:00
(new =(0 (mix (syn a) (syn b))) (div (abs a) (abs b)))
2014-04-04 14:00:26 +04:00
++ new |= [a=? b=@] :: [sign value] to @s
`@s`?:(a (mul 2 b) ?:(=(0 b) 0 +((mul 2 (dec b)))))
++ old |=(a=@s [(syn a) (abs a)]) :: [sign value]
++ pro |= [a=@s b=@s] :: multiplication
2013-09-29 00:21:18 +04:00
(new =(0 (mix (syn a) (syn b))) (mul (abs a) (abs b)))
2014-04-04 14:00:26 +04:00
++ rem |=([a=@s b=@s] (dif a (pro b (fra a b)))) :: remainder
++ sum |= [a=@s b=@s] :: addition
2013-09-29 00:21:18 +04:00
~| %si-sum
=+ [c=(old a) d=(old b)]
?: -.c
?: -.d
(new & (add +.c +.d))
?: (gte +.c +.d)
(new & (sub +.c +.d))
(new | (sub +.d +.c))
?: -.d
?: (gte +.c +.d)
(new | (sub +.c +.d))
(new & (sub +.d +.c))
(new | (add +.c +.d))
2014-04-04 14:00:26 +04:00
++ sun |=(a=@u (mul 2 a)) :: @u to @s
++ syn |=(a=@s =(0 (end 0 1 a))) :: sign test
2013-09-29 00:21:18 +04:00
--
++ fe :: modulo bloq
|_ a=bloq
++ dif |=([b=@ c=@] (sit (sub (add out (sit b)) (sit c))))
++ inv |=(b=@ (sub (dec out) (sit b)))
++ net |= b=@ ^- @
=> .(b (sit b))
?: (lte a 3)
b
=+ c=(dec a)
2013-09-29 00:21:18 +04:00
%+ con
(lsh c 1 $(a c, b (cut c [0 1] b)))
$(a c, b (cut c [1 1] b))
++ out (bex (bex a))
2014-01-25 02:08:37 +04:00
++ rol |= [b=bloq c=@ d=@] ^- @
=+ e=(sit d)
=+ f=(bex (sub a b))
=+ g=(mod c f)
(sit (con (lsh b g e) (rsh b (sub f g) e)))
++ ror |= [b=bloq c=@ d=@] ^- @
=+ e=(sit d)
=+ f=(bex (sub a b))
=+ g=(mod c f)
(sit (con (rsh b g e) (lsh b (sub f g) e)))
2013-09-29 00:21:18 +04:00
++ sum |=([b=@ c=@] (sit (add b c)))
++ sit |=(b=@ (end a 1 b))
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2cG, floating point ::
::
++ rlyd |=(red=@rd ~|(%real-nyet ^-([s=? h=@ f=@] !!)))
++ rlyh |=(reh=@rh ~|(%real-nyet ^-([s=? h=@ f=@] !!)))
++ rlyq |=(req=@rq ~|(%real-nyet ^-([s=? h=@ f=@] !!)))
++ rlys |=(res=@rs ~|(%real-nyet ^-([s=? h=@ f=@] !!)))
++ ryld |=([syn=? hol=@ fac=@] ~|(%real-nyet ^-(@rd !!)))
++ rylh |=([syn=? hol=@ fac=@] ~|(%real-nyet ^-(@rh !!)))
++ rylq |=([syn=? hol=@ fac=@] ~|(%real-nyet ^-(@rq !!)))
++ ryls |=([syn=? hol=@ fac=@] ~|(%real-nyet ^-(@rs !!)))
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
2013-09-29 00:21:18 +04:00
:: section 2cH, urbit time ::
::
2014-04-04 14:00:26 +04:00
++ year :: date to @d
2013-09-29 00:21:18 +04:00
|= det=date
^- @d
=+ ^= yer
?: a.det
(add 292.277.024.400 y.det)
(sub 292.277.024.400 (dec y.det))
=+ day=(yawn yer m.det d.t.det)
(yule day h.t.det m.t.det s.t.det f.t.det)
::
2014-04-04 14:00:26 +04:00
++ yore :: @d to date
2013-09-29 00:21:18 +04:00
|= now=@d
^- date
=+ rip=(yell now)
=+ ger=(yall d.rip)
:- ?: (gth y.ger 292.277.024.400)
[a=& y=(sub y.ger 292.277.024.400)]
[a=| y=+((sub 292.277.024.400 y.ger))]
[m.ger d.ger h.rip m.rip s.rip f.rip]
::
2014-04-04 14:00:26 +04:00
++ yell :: tarp from @d
2013-09-29 00:21:18 +04:00
|= now=@d
^- tarp
=+ sec=(rsh 6 1 now)
=+ ^= fan
=+ [muc=4 raw=(end 6 1 now)]
|- ^- (list ,@ux)
?: |(=(0 raw) =(0 muc))
~
=> .(muc (dec muc))
[(cut 4 [muc 1] raw) $(raw (end 4 muc raw))]
=+ day=(div sec day:yo)
=> .(sec (mod sec day:yo))
=+ hor=(div sec hor:yo)
=> .(sec (mod sec hor:yo))
=+ mit=(div sec mit:yo)
=> .(sec (mod sec mit:yo))
[day hor mit sec fan]
::
2014-04-04 14:00:26 +04:00
++ yule :: time atom
2013-09-29 00:21:18 +04:00
|= rip=tarp
^- @d
=+ ^= sec ;: add
2013-09-29 00:21:18 +04:00
(mul d.rip day:yo)
(mul h.rip hor:yo)
(mul m.rip mit:yo)
s.rip
==
=+ ^= fac =+ muc=4
|- ^- @
?~ f.rip
0
=> .(muc (dec muc))
(add (lsh 4 muc i.f.rip) $(f.rip t.f.rip))
(con (lsh 6 1 sec) fac)
::
2014-04-04 14:00:26 +04:00
++ yall :: day # to day of year
2013-09-29 00:21:18 +04:00
|= day=@ud
^- [y=@ud m=@ud d=@ud]
2013-12-17 08:48:40 +04:00
=+ [era=0 cet=0 lep=_?]
2013-09-29 00:21:18 +04:00
=> .(era (div day era:yo), day (mod day era:yo))
=> ^+ .
?: (lth day +(cet:yo))
.(lep &, cet 0)
=> .(lep |, cet 1, day (sub day +(cet:yo)))
.(cet (add cet (div day cet:yo)), day (mod day cet:yo))
=+ yer=(add (mul 400 era) (mul 100 cet))
|- ^- [y=@ud m=@ud d=@ud]
=+ dis=?:(lep 366 365)
?. (lth day dis)
=+ ner=+(yer)
$(yer ner, day (sub day dis), lep =(0 (end 0 2 ner)))
|- ^- [y=@ud m=@ud d=@ud]
=+ [mot=0 cah=?:(lep moy:yo moh:yo)]
|- ^- [y=@ud m=@ud d=@ud]
=+ zis=(snag mot cah)
?: (lth day zis)
[yer +(mot) +(day)]
$(mot +(mot), day (sub day zis))
::
2014-04-04 14:00:26 +04:00
++ yawn :: days since Jesus
2013-09-29 00:21:18 +04:00
|= [yer=@ud mot=@ud day=@ud]
^- @ud
=> .(mot (dec mot), day (dec day))
=> ^+ .
%= .
day
=+ cah=?:((yelp yer) moy:yo moh:yo)
|- ^- @ud
?: =(0 mot)
day
2013-09-29 00:21:18 +04:00
$(mot (dec mot), cah (slag 1 cah), day (add day (snag 0 cah)))
==
|- ^- @ud
?. =(0 (mod yer 4))
=+ ney=(dec yer)
$(yer ney, day (add day ?:((yelp ney) 366 365)))
?. =(0 (mod yer 100))
=+ nef=(sub yer 4)
$(yer nef, day (add day ?:((yelp nef) 1.461 1.460)))
2013-09-29 00:21:18 +04:00
?. =(0 (mod yer 400))
=+ nec=(sub yer 100)
$(yer nec, day (add day ?:((yelp nec) 36.525 36.524)))
2013-09-29 00:21:18 +04:00
(add day (mul (div yer 400) (add 1 (mul 4 36.524))))
::
2014-04-04 14:00:26 +04:00
++ yelp :: leap year
2013-09-29 00:21:18 +04:00
|= yer=@ud ^- ?
&(=(0 (mod yer 4)) |(!=(0 (mod yer 100)) =(0 (mod yer 400))))
::
++ yo :: time constants
2013-09-29 00:21:18 +04:00
|% ++ cet 36.524 :: (add 24 (mul 100 365))
++ day 86.400 :: (mul 24 hor)
++ era 146.097 :: (add 1 (mul 4 cet))
++ hor 3.600 :: (mul 60 mit)
++ jes 106.751.991.084.417 :: (mul 730.692.561 era)
++ mit 60
++ moh `(list ,@ud)`[31 28 31 30 31 30 31 31 30 31 30 31 ~]
++ moy `(list ,@ud)`[31 29 31 30 31 30 31 31 30 31 30 31 ~]
++ qad 126.144.001 :: (add 1 (mul 4 yer))
++ yer 31.536.000 :: (mul 365 day)
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2cI, almost macros ::
::
++ hard
2013-12-21 06:35:33 +04:00
|* han=$+(* *)
2013-09-29 00:21:18 +04:00
|= fud=* ^- han
~| %hard
=+ gol=(han fud)
?>(=(gol fud) gol)
::
++ soft
2013-12-21 06:35:33 +04:00
|* han=$+(* *)
2013-09-29 00:21:18 +04:00
|= fud=* ^- (unit han)
=+ gol=(han fud)
?.(=(gol fud) ~ [~ gol])
:::::::::::::::::::::::::::::::::::::::::::::::::::::: ::
:::: chapter 2d, containers ::::
:: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2dA, sets ::
::
++ apt :: set invariant
|= a=(tree)
?@ a
&
2013-09-29 00:21:18 +04:00
?& ?@(l.a & ?&((vor n.a n.l.a) (hor n.l.a n.a)))
?@(r.a & ?&((vor n.a n.r.a) (hor n.a n.r.a)))
==
::
++ in :: set engine
2013-12-21 06:35:33 +04:00
!:
2013-09-29 00:21:18 +04:00
~/ %in
2013-12-21 06:35:33 +04:00
|/ a=(set)
2013-09-29 00:21:18 +04:00
+- all
~/ %all
2013-12-21 06:35:33 +04:00
|* b=$+(* ?)
2013-09-29 00:21:18 +04:00
|- ^- ?
?@ a
&
?&((b n.a) $(a l.a) $(a r.a))
::
+- any
~/ %any
2013-12-21 06:35:33 +04:00
|* b=$+(* ?)
2013-09-29 00:21:18 +04:00
|- ^- ?
?@ a
|
?|((b n.a) $(a l.a) $(a r.a))
::
+- del
~/ %del
2013-12-21 06:35:33 +04:00
|* b=*
2013-09-29 00:21:18 +04:00
|- ^+ a
?~ a
~
?. =(b n.a)
?: (hor b n.a)
[n.a $(a l.a) r.a]
2013-09-29 00:21:18 +04:00
[n.a l.a $(a r.a)]
|- ^- ?(~ _a)
?~ l.a r.a
?~ r.a l.a
?: (vor n.l.a n.r.a)
[n.l.a l.l.a $(l.a r.l.a)]
[n.r.a $(r.a l.r.a) r.r.a]
::
+- dig
2013-09-29 00:21:18 +04:00
|= b=*
=+ c=1
|- ^- (unit ,@)
?~ a ~
?: =(b n.a) [~ u=(peg c 2)]
?: (gor b n.a)
$(a l.a, c (peg c 6))
$(a r.a, c (peg c 7))
::
+- gas
~/ %gas
2013-12-16 05:15:04 +04:00
|= b=(list ,_?>(?=(^ a) n.a))
2013-09-29 00:21:18 +04:00
|- ^+ a
?@ b
a
2013-12-21 06:35:33 +04:00
$(b t.b, a (put(+< a) i.b))
2013-09-29 00:21:18 +04:00
::
+- has
~/ %has
2013-12-21 06:35:33 +04:00
|* b=*
2013-09-29 00:21:18 +04:00
|- ^- ?
?@ a
|
?: =(b n.a)
&
?: (hor b n.a)
$(a l.a)
$(a r.a)
::
+- put
~/ %put
2013-12-21 06:35:33 +04:00
|* b=*
2013-09-29 00:21:18 +04:00
|- ^+ a
?@ a
[b ~ ~]
?: =(b n.a)
a
?: (hor b n.a)
=+ c=$(a l.a)
?> ?=(^ c)
?: (vor n.a n.c)
[n.a c r.a]
[n.c l.c [n.a r.c r.a]]
=+ c=$(a r.a)
?> ?=(^ c)
?: (vor n.a n.c)
[n.a l.a c]
[n.c [n.a l.a l.c] r.c]
::
+- rep
2013-12-21 06:35:33 +04:00
|* [b=* c=_,*]
2013-09-29 00:21:18 +04:00
|-
?~ a b
$(a r.a, b $(a l.a, b (c n.a b)))
::
+- tap
~/ %tap
2013-12-16 05:15:04 +04:00
|= b=(list ,_?>(?=(^ a) n.a))
2013-09-29 00:21:18 +04:00
^+ b
?@ a
b
$(a r.a, b [n.a $(a l.a)])
::
+- wyt
.+
|- ^- @
?~(a 0 +((add $(a l.a) $(a r.a))))
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2dB, maps ::
::
++ ept :: map invariant
|= a=(tree ,[p=* q=*])
?@ a
&
2013-09-29 00:21:18 +04:00
?& ?@(l.a & ?&((vor p.n.a p.n.l.a) (hor p.n.l.a p.n.a)))
?@(r.a & ?&((vor p.n.a p.n.r.a) (hor p.n.a p.n.r.a)))
==
::
++ by :: map engine
~/ %by
|/ a=(map)
2013-09-29 00:21:18 +04:00
+- all
~/ %all
2013-12-21 06:35:33 +04:00
|* b=$+(* ?)
2013-09-29 00:21:18 +04:00
|- ^- ?
?@ a
&
?&((b q.n.a) $(a l.a) $(a r.a))
::
+- any
~/ %any
2013-12-21 06:35:33 +04:00
|* b=$+(* ?)
2013-09-29 00:21:18 +04:00
|- ^- ?
?@ a
|
?|((b q.n.a) $(a l.a) $(a r.a))
::
+- del
~/ %del
2013-12-21 06:35:33 +04:00
|* b=*
2013-09-29 00:21:18 +04:00
|- ^+ a
?~ a
~
?. =(b p.n.a)
?: (gor b p.n.a)
[n.a $(a l.a) r.a]
2013-09-29 00:21:18 +04:00
[n.a l.a $(a r.a)]
|- ^- ?(~ _a)
?~ l.a r.a
?~ r.a l.a
?: (vor p.n.l.a p.n.r.a)
[n.l.a l.l.a $(l.a r.l.a)]
[n.r.a $(r.a l.r.a) r.r.a]
::
+- dig
2013-09-29 00:21:18 +04:00
|= b=*
=+ c=1
|- ^- (unit ,@)
?~ a ~
?: =(b p.n.a) [~ u=(peg c 2)]
?: (gor b p.n.a)
$(a l.a, c (peg c 6))
$(a r.a, c (peg c 7))
::
+- gas
~/ %gas
2013-12-21 06:35:33 +04:00
|* b=(list ,[p=* q=*])
2013-12-16 05:15:04 +04:00
=> .(b `(list ,_?>(?=(^ a) n.a))`b)
2013-09-29 00:21:18 +04:00
|- ^+ a
?@ b
a
$(b t.b, a (put(+< a) p.i.b q.i.b))
2013-09-29 00:21:18 +04:00
::
+- get
~/ %get
2013-12-21 06:35:33 +04:00
|* b=*
2013-09-29 00:21:18 +04:00
|- ^- ?(~ [~ u=_?>(?=(^ a) q.n.a)])
?@ a
~
?: =(b p.n.a)
[~ u=q.n.a]
?: (gor b p.n.a)
$(a l.a)
$(a r.a)
::
+- has
~/ %has
2013-12-21 06:35:33 +04:00
|* b=*
!=(~ (get(+< a) b))
2013-09-29 00:21:18 +04:00
::
+- mar
2013-12-21 06:35:33 +04:00
|* [b=_?>(?=(^ a) p.n.a) c=(unit ,_?>(?=(^ a) q.n.a))]
2013-09-29 00:21:18 +04:00
?~ c
(del b)
(put b u.c)
::
+- put
~/ %put
2013-12-21 06:35:33 +04:00
|* [b=* c=*]
2013-09-29 00:21:18 +04:00
|- ^+ a
?@ a
[[b c] ~ ~]
?: =(b p.n.a)
?: =(c q.n.a)
a
[[b c] l.a r.a]
?: (gor b p.n.a)
=+ d=$(a l.a)
?> ?=(^ d)
?: (vor p.n.a p.n.d)
[n.a d r.a]
[n.d l.d [n.a r.d r.a]]
=+ d=$(a r.a)
?> ?=(^ d)
?: (vor p.n.a p.n.d)
[n.a l.a d]
[n.d [n.a l.a l.d] r.d]
::
+- rep
2013-12-21 06:35:33 +04:00
|* [b=* c=_,*]
2013-09-29 00:21:18 +04:00
|-
?~ a b
$(a r.a, b $(a l.a, b (c n.a b)))
::
+- rib
2013-12-21 06:35:33 +04:00
|* [b=* c=_,*]
2013-09-29 00:21:18 +04:00
|- ^+ [b a]
?~ a [b ~]
=+ d=(c n.a b)
=. n.a +.d
=+ e=$(a l.a, b -.d)
=+ f=$(a r.a, b -.e)
[-.f [n.a +.e +.f]]
::
+- run
2013-12-21 06:35:33 +04:00
|* b=_,*
|-
2013-09-29 00:21:18 +04:00
?~ a a
[[p.n.a (b q.n.a)] $(a l.a) $(a r.a)]
::
+- tap
~/ %tap
2013-12-16 05:15:04 +04:00
|= b=(list ,_?>(?=(^ a) n.a))
2013-09-29 00:21:18 +04:00
^+ b
?@ a
b
$(a r.a, b [n.a $(a l.a)])
::
2014-04-16 00:07:11 +04:00
+- uni
~/ %uni
|= b=_a
?@ b a
%= $
a (~(put by a) p.n.b q.n.b)
b (~(uni by l.b) r.b)
==
::
2013-09-29 00:21:18 +04:00
+- wyt
.+
|- ^- @
?~(a 0 +((add $(a l.a) $(a r.a))))
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2dC, queues ::
::
++ to :: queue engine
|/ a=(qeu)
2013-09-29 00:21:18 +04:00
+- bal
|- ^+ a
2013-12-24 00:49:15 +04:00
?~ a ~
2013-09-29 00:21:18 +04:00
?. |(?=(~ l.a) (vor n.a n.l.a))
$(a [n.l.a l.l.a $(a [n.a r.l.a r.a])])
?. |(?=(~ r.a) (vor n.a n.r.a))
$(a [n.r.a $(a [n.a l.a l.r.a]) r.r.a])
a
::
+- dep
|- ^- @
?~ a 0
+((max $(a l.a) $(a r.a)))
::
+- gas
2013-12-16 05:15:04 +04:00
|= b=(list ,_?>(?=(^ a) n.a))
2013-09-29 00:21:18 +04:00
|- ^+ a
?~(b a $(b t.b, a (put(+< a) i.b)))
2013-09-29 00:21:18 +04:00
::
+- get
|- ^+ [p=?>(?=(^ a) n.a) q=a]
?~ a
!!
?~ r.a
[n.a l.a]
=+ b=$(a r.a)
:- p.b
?: |(?=(~ q.b) (vor n.a n.q.b))
[n.a l.a q.b]
[n.q.b [n.a l.a l.q.b] r.q.b]
::
+- nap
?> ?=(^ a)
?: =(~ l.a) r.a
=+ b=get(+< l.a)
bal(+< ^+(a [p.b q.b r.a]))
2013-09-29 00:21:18 +04:00
::
+- put
2013-12-21 06:35:33 +04:00
|* b=*
2013-09-29 00:21:18 +04:00
|- ^+ a
?~ a
[b ~ ~]
bal(+< a(l $(a l.a)))
2013-09-29 00:21:18 +04:00
::
+- tap
2013-12-16 05:15:04 +04:00
|= b=(list ,_?>(?=(^ a) n.a))
2013-09-29 00:21:18 +04:00
^+ b
?~ a
b
$(a r.a, b [n.a $(a l.a)])
::
+- top
2013-12-16 05:15:04 +04:00
|- ^- (unit ,_?>(?=(^ a) n.a))
2013-09-29 00:21:18 +04:00
?~ a ~
?~(r.a [~ n.a] $(a r.a))
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2dD, casual containers ::
::
++ mo :: make a map
2013-12-21 06:35:33 +04:00
|* a=(list)
2013-09-29 00:21:18 +04:00
=> .(a `_(homo a)`a)
=> .(a `(list ,[p=_-<.a q=_->.a])`a)
2013-12-16 05:15:04 +04:00
=+ b=*(map ,_?>(?=(^ a) p.i.a) ,_?>(?=(^ a) q.i.a))
2013-09-29 00:21:18 +04:00
(~(gas by b) a)
::
++ sa :: make a set
2013-12-21 06:35:33 +04:00
|* a=(list)
2013-09-29 00:21:18 +04:00
=> .(a `_(homo a)`a)
2013-12-16 05:15:04 +04:00
=+ b=*(set ,_?>(?=(^ a) i.a))
2013-09-29 00:21:18 +04:00
(~(gas in b) a)
2014-03-20 05:05:42 +04:00
::
++ qu :: make a set
|* a=(list)
=> .(a `_(homo a)`a)
=+ b=*(set ,_?>(?=(^ a) i.a))
(~(gas in b) a)
2013-09-29 00:21:18 +04:00
:::::::::::::::::::::::::::::::::::::::::::::::::::::: ::
:::: chapter 2e, miscellaneous libs ::::
:: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eA, packing ::
::
++ cue :: unpack
~/ %cue
|= a=@
^- *
=+ b=0
=+ m=`(map ,@ ,*)`~
=< q
|- ^- [p=@ q=* r=_m]
?: =(0 (cut 0 [b 1] a))
=+ c=(rub +(b) a)
[+(p.c) q.c (~(put by m) b q.c)]
=+ c=(add 2 b)
?: =(0 (cut 0 [+(b) 1] a))
=+ u=$(b c)
=+ v=$(b (add p.u c), m r.u)
=+ w=[q.u q.v]
[(add 2 (add p.u p.v)) w (~(put by r.v) b w)]
=+ d=(rub c a)
[(add 2 p.d) (need (~(get by m) q.d)) m]
::
++ jam :: pack
~/ %jam
|= a=*
^- @
=+ b=0
=+ m=`(map ,* ,@)`~
=< q
|- ^- [p=@ q=@ r=_m]
2013-09-29 00:21:18 +04:00
=+ c=(~(get by m) a)
?@ c
=> .(m (~(put by m) a b))
?: ?=(@ a)
=+ d=(mat a)
[(add 1 p.d) (lsh 0 1 q.d) m]
=> .(b (add 2 b))
=+ d=$(a -.a)
=+ e=$(a +.a, b (add b p.d), m r.d)
[(add 2 (add p.d p.e)) (mix 1 (lsh 0 2 (cat 0 q.d q.e))) r.e]
?: ?&(?=(@ a) (lte (met 0 a) (met 0 u.c)))
=+ d=(mat a)
[(add 1 p.d) (lsh 0 1 q.d) m]
=+ d=(mat u.c)
[(add 2 p.d) (mix 3 (lsh 0 2 q.d)) m]
::
++ mat :: length-encode
~/ %mat
|= a=@
^- [p=@ q=@]
?: =(0 a)
[1 1]
=+ b=(met 0 a)
=+ c=(met 0 b)
:- (add (add c c) b)
(cat 0 (bex c) (mix (end 0 (dec c) b) (lsh 0 (dec c) a)))
::
++ rub :: length-decode
~/ %rub
|= [a=@ b=@]
^- [p=@ q=@]
=+ c==+(c=0 |-(?.(=(0 (cut 0 [(add a c) 1] b)) c $(c +(c)))))
?: =(0 c)
[1 0]
=+ d=(add a +(c))
=+ e=(add (bex (dec c)) (cut 0 [d (dec c)] b))
[(add (add c c) e) (cut 0 [(add d (dec c)) e] b)]
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eB, parsing (tracing) ::
::
++ last |= [zyc=hair naz=hair]
^- hair
?: =(p.zyc p.naz)
?:((gth q.zyc q.naz) zyc naz)
?:((gth p.zyc p.naz) zyc naz)
::
++ lust |= [weq=char naz=hair]
^- hair
?:(=(10 weq) [+(p.naz) 1] [p.naz +(q.naz)])
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eC, parsing (custom rules) ::
::
++ cold
~/ %cold
2013-12-21 06:35:33 +04:00
|* [cus=* sef=_rule]
2013-09-29 00:21:18 +04:00
~/ %fun
|= tub=nail
=+ vex=(sef tub)
?@ q.vex
vex
[p=p.vex q=[~ u=[p=cus q=q.u.q.vex]]]
::
++ cook
~/ %cook
2013-12-21 06:35:33 +04:00
|* [poq=_,* sef=_rule]
2013-09-29 00:21:18 +04:00
~/ %fun
|= tub=nail
=+ vex=(sef tub)
?@ q.vex
vex
[p=p.vex q=[~ u=[p=(poq p.u.q.vex) q=q.u.q.vex]]]
::
++ easy
~/ %easy
2013-12-21 06:35:33 +04:00
|* huf=*
2013-09-29 00:21:18 +04:00
~/ %fun
|= tub=nail
2013-12-16 05:15:04 +04:00
^- (like ,_huf)
2013-09-29 00:21:18 +04:00
[p=p.tub q=[~ u=[p=huf q=tub]]]
::
++ fail |=(tub=nail [p=p.tub q=~])
++ full
2013-12-21 06:35:33 +04:00
|* sef=_rule
2013-09-29 00:21:18 +04:00
|= tub=nail
=+ vex=(sef tub)
?@(q.vex vex ?:(=(~ q.q.u.q.vex) vex [p=p.vex q=~]))
::
++ funk
2013-12-21 06:35:33 +04:00
|* [pre=tape sef=_rule]
2013-09-29 00:21:18 +04:00
|= tub=nail
(sef p.tub (weld pre q.tub))
::
++ here
~/ %here
2013-12-21 06:35:33 +04:00
|* [hez=_|=([a=pint b=*] [a b]) sef=_rule]
2013-09-29 00:21:18 +04:00
~/ %fun
|= tub=nail
=+ vex=(sef tub)
?@ q.vex
vex
[p=p.vex q=[~ u=[p=(hez [p.tub p.q.u.q.vex] p.u.q.vex) q=q.u.q.vex]]]
::
++ jest
|= daf=@t
|= tub=nail
=+ fad=daf
|- ^- (like ,@t)
?: =(0 daf)
[p=p.tub q=[~ u=[p=fad q=tub]]]
?: |(?=(~ q.tub) !=((end 3 1 daf) i.q.tub))
(fail tub)
$(p.tub (lust i.q.tub p.tub), q.tub t.q.tub, daf (rsh 3 1 daf))
::
++ just :: XX redundant, jest
~/ %just
|= daf=char
~/ %fun
|= tub=nail
^- (like char)
?@ q.tub
(fail tub)
2013-09-29 00:21:18 +04:00
?. =(daf i.q.tub)
(fail tub)
(next tub)
::
++ knee
2013-12-21 06:35:33 +04:00
|* [gar=* sef=_|.(rule)]
2013-09-29 00:21:18 +04:00
|= tub=nail
2013-12-16 05:15:04 +04:00
^- (like ,_gar)
2013-09-29 00:21:18 +04:00
((sef) tub)
::
++ mask
~/ %mask
|= bud=(list char)
~/ %fun
|= tub=nail
^- (like char)
?@ q.tub
(fail tub)
2013-09-29 00:21:18 +04:00
?. (lien bud |=(a=char =(i.q.tub a)))
(fail tub)
(next tub)
::
++ next
|= tub=nail
^- (like char)
?@ q.tub
(fail tub)
=+ zac=(lust i.q.tub p.tub)
2013-09-29 00:21:18 +04:00
[zac [~ i.q.tub [zac t.q.tub]]]
::
++ sear
~/ %sear
2013-12-21 06:35:33 +04:00
|* [pyq=_|=(* *(unit)) sef=_rule]
2013-09-29 00:21:18 +04:00
~/ %fun
|= tub=nail
=+ vex=(sef tub)
?@ q.vex
vex
=+ gey=(pyq p.u.q.vex)
?@ gey
[p=p.vex q=~]
[p=p.vex q=[~ u=[p=u.gey q=q.u.q.vex]]]
::
++ shim
~/ %shim
|= [les=@ mos=@]
2013-09-29 00:21:18 +04:00
~/ %fun
|= tub=nail
^- (like char)
?@ q.tub
(fail tub)
?. ?&((gte i.q.tub les) (lte i.q.tub mos))
2013-09-29 00:21:18 +04:00
(fail tub)
(next tub)
::
++ stag
~/ %stag
2013-12-21 06:35:33 +04:00
|* [gob=* sef=_rule]
2013-09-29 00:21:18 +04:00
~/ %fun
|= tub=nail
=+ vex=(sef tub)
?@ q.vex
vex
[p=p.vex q=[~ u=[p=[gob p.u.q.vex] q=q.u.q.vex]]]
::
++ stet
|* leh=(list ,[?(@ [@ @]) _rule])
|-
?~ leh
~
[i=[p=-.i.leh q=+.i.leh] t=$(leh t.leh)]
::
2013-09-29 00:21:18 +04:00
++ stew
~/ %stew
2013-12-21 06:35:33 +04:00
|* leh=(list ,[p=?(@ [@ @]) q=_rule])
2013-09-29 00:21:18 +04:00
=+ ^= wor
|= [ort=?(@ [@ @]) wan=?(@ [@ @])]
?@ ort
?@(wan (lth ort wan) (lth ort -.wan))
?@(wan (lth +.ort wan) (lth +.ort -.wan))
=+ ^= hel
=+ hel=`(tree $_(?>(?=(^ leh) i.leh)))`~
|- ^+ hel
?~ leh
~
=+ yal=$(leh t.leh)
|- ^+ hel
?~ yal
[i.leh ~ ~]
?: (wor p.i.leh p.n.yal)
=+ nuc=$(yal l.yal)
?> ?=(^ nuc)
?: (vor p.n.yal p.n.nuc)
[n.yal nuc r.yal]
[n.nuc l.nuc [n.yal r.nuc r.yal]]
=+ nuc=$(yal r.yal)
?> ?=(^ nuc)
?: (vor p.n.yal p.n.nuc)
[n.yal l.yal nuc]
[n.nuc [n.yal l.yal l.nuc] r.nuc]
~% %fun ..^$ ~
|= tub=nail
?@ q.tub
(fail tub)
|-
?@ hel
(fail tub)
?: ?@ p.n.hel
=(p.n.hel i.q.tub)
?&((gte i.q.tub -.p.n.hel) (lte i.q.tub +.p.n.hel))
:: (q.n.hel [(lust i.q.tub p.tub) t.q.tub])
(q.n.hel tub)
?: (wor i.q.tub p.n.hel)
$(hel l.hel)
$(hel r.hel)
::
++ stir
~/ %stir
2013-12-21 06:35:33 +04:00
|* [rud=* raq=_|*([a=* b=*] [a b]) fel=_rule]
2013-09-29 00:21:18 +04:00
~/ %fun
|= tub=nail
2013-12-16 05:15:04 +04:00
^- (like ,_rud)
=+ vex=(fel tub)
2013-09-29 00:21:18 +04:00
?@ q.vex
[p.vex [~ rud tub]]
=+ wag=$(tub q.u.q.vex)
?> ?=(^ q.wag)
[(last p.vex p.wag) [~ (raq p.u.q.vex p.u.q.wag) q.u.q.wag]]
::
++ stun
~/ %stun
2013-12-21 06:35:33 +04:00
|* [[les=@ mos=@] fel=_rule]
2013-09-29 00:21:18 +04:00
~/ %fun
|= tub=nail
2013-12-16 05:15:04 +04:00
^- (like (list ,_(wonk (fel))))
2013-09-29 00:21:18 +04:00
?: =(0 mos)
[p.tub [~ ~ tub]]
=+ vex=(fel tub)
?@ q.vex
?: =(0 les)
[p.vex [~ ~ tub]]
vex
=+ ^= wag %= $
les ?:(=(0 les) 0 (dec les))
mos ?:(=(0 mos) 0 (dec mos))
tub q.u.q.vex
==
?@ q.wag
wag
[p.wag [~ [p.u.q.vex p.u.q.wag] q.u.q.wag]]
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eD, parsing (combinators) ::
::
++ bend
~/ %bend
2013-12-21 06:35:33 +04:00
|* raq=_|*([a=* b=*] [~ u=[a b]])
2013-09-29 00:21:18 +04:00
~/ %fun
2013-12-21 06:35:33 +04:00
|* [vex=edge sab=_rule]
2013-09-29 00:21:18 +04:00
?@ q.vex
vex
2013-09-29 00:21:18 +04:00
=+ yit=(sab q.u.q.vex)
=+ yur=(last p.vex p.yit)
?@ q.yit
[p=yur q=q.vex]
=+ vux=(raq p.u.q.vex p.u.q.yit)
?~ vux
[p=yur q=q.vex]
[p=yur q=[~ u=[p=u.vux q=q.u.q.yit]]]
::
++ comp
~/ %comp
2013-12-21 06:35:33 +04:00
|* raq=_|*([a=* b=*] [a b])
2013-09-29 00:21:18 +04:00
~/ %fun
2013-12-21 06:35:33 +04:00
|* [vex=edge sab=_rule]
2013-09-29 00:21:18 +04:00
?@ q.vex
vex
=+ yit=(sab q.u.q.vex)
=+ yur=(last p.vex p.yit)
?@ q.yit
[p=yur q=q.yit]
[p=yur q=[~ u=[p=(raq p.u.q.vex p.u.q.yit) q=q.u.q.yit]]]
::
++ glue
~/ %glue
2013-12-21 06:35:33 +04:00
|* bus=_rule
2013-09-29 00:21:18 +04:00
~/ %fun
2013-12-21 06:35:33 +04:00
|* [vex=edge sab=_rule]
2013-09-29 00:21:18 +04:00
(plug vex ;~(pfix bus sab))
::
++ pfix
~/ %pfix
(comp |*([a=* b=*] b))
2013-09-29 00:21:18 +04:00
::
++ plug
~/ %plug
2013-12-21 06:35:33 +04:00
|* [vex=edge sab=_rule]
2013-09-29 00:21:18 +04:00
?@ q.vex
vex
=+ yit=(sab q.u.q.vex)
=+ yur=(last p.vex p.yit)
?@ q.yit
[p=yur q=q.yit]
[p=yur q=[~ u=[p=[p.u.q.vex p.u.q.yit] q=q.u.q.yit]]]
::
++ pose
~/ %pose
2013-12-21 06:35:33 +04:00
|* [vex=edge sab=_rule]
2013-09-29 00:21:18 +04:00
?@ q.vex
=+ roq=(sab)
[p=(last p.vex p.roq) q=q.roq]
vex
::
++ sfix
~/ %sfix
(comp |*([a=* b=*] a))
2013-09-29 00:21:18 +04:00
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eE, parsing (composers) ::
::
++ bass
2013-12-21 06:35:33 +04:00
|* [wuc=@ tyd=_rule]
2013-09-29 00:21:18 +04:00
%+ cook
|= waq=(list ,@)
%+ roll
waq
2013-12-17 08:48:40 +04:00
=|([p=@ q=@] |.((add p (mul wuc q))))
2013-09-29 00:21:18 +04:00
tyd
::
++ boss
2013-12-21 06:35:33 +04:00
|* [wuc=@ tyd=_rule]
2013-09-29 00:21:18 +04:00
%+ cook
|= waq=(list ,@)
%+ reel
waq
2013-12-17 08:48:40 +04:00
=|([p=@ q=@] |.((add p (mul wuc q))))
2013-09-29 00:21:18 +04:00
tyd
::
++ ifix
2013-12-21 06:35:33 +04:00
|* [fel=[p=_rule q=_rule] hof=_rule]
2013-09-29 00:21:18 +04:00
;~(pfix p.fel ;~(sfix hof q.fel))
::
++ more
2013-12-21 06:35:33 +04:00
|* [bus=_rule fel=_rule]
2013-09-29 00:21:18 +04:00
;~(pose (most bus fel) (easy ~))
::
++ most
2013-12-21 06:35:33 +04:00
|* [bus=_rule fel=_rule]
2013-09-29 00:21:18 +04:00
;~(plug fel (star ;~(pfix bus fel)))
::
2013-12-21 06:35:33 +04:00
++ plus |*(fel=_rule ;~(plug fel (star fel)))
2013-09-29 00:21:18 +04:00
++ slug
2013-12-21 06:35:33 +04:00
|* [rud=* raq=_|*([a=* b=*] [a b])]
|* [bus=_rule fel=_rule]
2013-09-29 00:21:18 +04:00
;~((comp raq) fel (stir rud raq ;~(pfix bus fel)))
::
++ star
2013-12-21 06:35:33 +04:00
|* fel=_rule
(stir `(list ,_(wonk *fel))`~ |*([a=* b=*] [a b]) fel)
2013-09-29 00:21:18 +04:00
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eF, parsing (ascii) ::
::
++ ace (just ' ')
++ bar (just '|')
++ bas (just '\\')
++ buc (just '$')
++ cab (just '_')
++ cen (just '%')
++ col (just ':')
++ com (just ',')
++ doq (just '"')
++ dot (just '.')
++ fas (just '/')
++ gal (just '<')
++ gar (just '>')
++ hax (just '#')
++ kel (just '{')
++ ker (just '}')
++ ket (just '^')
++ lus (just '+')
++ hep (just '-')
++ pel (just '(')
++ pam (just '&')
++ per (just ')')
++ pat (just '@')
++ sel (just '[')
++ sem (just ';')
++ ser (just ']')
++ sig (just '~')
++ soq (just '\'')
++ tar (just '*')
++ tec (just '`')
++ tis (just '=')
++ wut (just '?')
++ zap (just '!')
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eG, parsing (whitespace) ::
::
++ dog ;~(plug dot gay)
++ doh ;~(plug ;~(plug hep hep) gay)
++ dun (cold ~ ;~(plug hep hep))
++ duq (cold ~ ;~(plug tis hep))
++ duz (cold ~ ;~(plug tis tis))
2014-01-04 11:28:16 +04:00
++ gah (mask [`@`10 ' ' ~])
++ gap (cold ~ ;~(plug gaq (star ;~(pose vul gah))))
++ gaq ;~(pose (just `@`10) ;~(plug gah ;~(pose gah vul)) vul)
2013-09-29 00:21:18 +04:00
++ gay ;~(pose gap (easy ~))
++ vul (cold ~ ;~(plug col col (star (shim 32 126)) (just ^-(@ 10))))
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eH, parsing (idioms) ::
::
++ alf ;~(pose low hig)
++ aln ;~(pose low hig nud)
++ alp ;~(pose low hig nud hep)
++ bet ;~(pose (cold 2 hep) (cold 3 lus))
++ bin (bass 2 (most gon but))
++ but (cook |=(a=@ (sub a '0')) (shim '0' '1'))
2014-04-10 03:25:11 +04:00
++ cit (cook |=(a=@ (sub a '0')) (shim '0' '7'))
2013-09-29 00:21:18 +04:00
++ dem (bass 10 (most gon dit))
++ dit (cook |=(a=@ (sub a '0')) (shim '0' '9'))
++ gul ;~(pose (cold 2 gal) (cold 3 gar))
++ gon ;~(pose ;~(plug bas gay fas) (easy ~))
++ hex (bass 16 (most gon hit))
++ hig (shim 'A' 'Z')
++ hit ;~ pose
dit
2013-09-29 00:21:18 +04:00
(cook |=(a=char (sub a 87)) (shim 'a' 'f'))
(cook |=(a=char (sub a 55)) (shim 'A' 'F'))
==
++ low (shim 'a' 'z')
++ mes (cook |=([a=@ b=@] (add (mul 16 a) b)) ;~(plug hit hit))
++ nix (boss 256 (star ;~(pose aln cab)))
++ nud (shim '0' '9')
++ poy ;~(pfix bas ;~(pose bas soq mes))
++ qit ;~(pose (shim 32 38) (shim 40 91) (shim 93 126) (shim 128 255) poy)
++ qut (ifix [soq soq] (boss 256 (more gon qit)))
++ sym
2013-09-29 00:21:18 +04:00
%+ cook
|=(a=tape (rap 3 ^-((list ,@) a)))
;~(plug low (star ;~(pose nud low hep)))
::
++ ven ;~ (comp |=([a=@ b=@] (peg a b)))
bet
=+ hom=`?`|
|= tub=nail
^- (like axis)
=+ vex=?:(hom (bet tub) (gul tub))
?@ q.vex
[p.tub [~ 1 tub]]
2013-09-29 00:21:18 +04:00
=+ wag=$(p.tub p.vex, hom !hom, tub q.u.q.vex)
?> ?=(^ q.wag)
[p.wag [~ (peg p.u.q.vex p.u.q.wag) q.u.q.wag]]
==
++ vit
;~ pose
2013-09-29 00:21:18 +04:00
(cook |=(a=@ (sub a 65)) (shim 'A' 'Z'))
(cook |=(a=@ (sub a 71)) (shim 'a' 'z'))
(cook |=(a=@ (add a 4)) (shim '0' '9'))
(cold 62 (just '-'))
(cold 63 (just '+'))
==
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eI, parsing (external) ::
::
2013-12-21 06:35:33 +04:00
++ rash |*([naf=@ sab=_rule] (scan (trip naf) sab))
++ rush |* [naf=@ sab=_rule]
2013-09-29 00:21:18 +04:00
=+ vex=((full sab) [[1 1] (trip naf)])
?~(q.vex ~ [~ u=p.u.q.vex])
2013-12-21 06:35:33 +04:00
++ scan |* [los=tape sab=_rule]
2013-09-29 00:21:18 +04:00
=+ vex=((full sab) [[1 1] los])
?@ q.vex
2014-01-05 02:57:44 +04:00
~_ (show [%m '{%d %d}'] p.p.vex q.p.vex ~)
2014-01-04 11:28:16 +04:00
~|('syntax-error' !!)
2013-09-29 00:21:18 +04:00
p.u.q.vex
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eJ, formatting (basic text) ::
::
++ cass :: case-insensitive
|= vib=tape
%+ rap 3
(turn vib |=(a=@ ?.(&((gte a 'A') (lte a 'Z')) a (add 32 a))))
::
++ crip |=(a=tape `@t`(rap 3 a))
++ mesc
|= vib=tape
^- tape
?@ vib
~
?: =('\\' i.vib)
['\\' '\\' $(vib t.vib)]
?: ?|((gth i.vib 126) (lth i.vib 32) =(39 i.vib))
['\\' (weld ~(rux at i.vib) (runt [1 47] $(vib t.vib)))]
[i.vib $(vib t.vib)]
::
++ runt
|= [[a=@ b=@] c=tape]
^- tape
?: =(0 a)
c
[b $(a (dec a))]
::
++ sand :: atom sanity
|= a=@ta
|= b=@ ^- (unit ,@)
2013-09-29 00:21:18 +04:00
?.(((sane a) b) ~ [~ b])
::
++ sane :: atom sanity
|= a=@ta
2013-09-29 00:21:18 +04:00
|= b=@ ^- ?
?. =(%t (end 3 1 a))
~|(%sane-stub !!)
=+ [inx=0 len=(met 3 b)]
?: =(%tas a)
|- ^- ?
?: =(inx len) &
=+ cur=(cut 3 [inx 1] b)
?& ?| &((gte cur 'a') (lte cur 'z'))
&(=('-' cur) !=(0 inx) !=(len inx))
==
$(inx +(inx))
==
?: =(%ta a)
|- ^- ?
?: =(inx len) &
=+ cur=(cut 3 [inx 1] b)
?& ?| &((gte cur 'a') (lte cur 'z'))
&((gte cur 'A') (lte cur 'Z'))
2013-09-29 00:21:18 +04:00
|(=('-' cur) =('~' cur) =('_' cur) =('.' cur))
==
$(inx +(inx))
==
|- ^- ?
?: =(0 b) &
=+ cur=(end 3 1 b)
?: &((lth cur 32) !=(10 cur)) |
=+ len=(teff cur)
?& |(=(1 len) =+(i=1 |-(|(=(i len) &((gte (cut 3 [i 1] b) 128) $(i +(i)))))))
$(b (rsh 3 len b))
==
::
++ trim
|= [a=@ b=tape]
^- [p=tape q=tape]
?@ b
[~ ~]
?: =(0 a)
[~ b]
=+ c=$(a (dec a), b t.b)
[[i.b p.c] q.c]
::
++ trip
~/ %trip
|= a=@ ^- tape
?: =(0 (met 3 a))
~
[^-(@ta (end 3 1 a)) $(a (rsh 3 1 a))]
::
++ teff :: length utf8
|= a=@t ^- @
=+ b=(end 3 1 a)
?: =(0 b)
?>(=(0 a) 0)
?> |((gte b 32) =(10 b))
?:((lte b 127) 1 ?:((lte b 223) 2 ?:((lte b 239) 3 4)))
::
++ turf :: utf8 to utf32
|= a=@t
^- @c
%+ rap 5
|- ^- (list ,@c)
2013-09-29 00:21:18 +04:00
=+ b=(teff a)
?: =(0 b) ~
:- %+ can 0
%+ turn
^- (list ,[p=@ q=@])
?+ b !!
1 [[0 7] ~]
2 [[8 6] [0 5] ~]
3 [[16 6] [8 6] [0 4] ~]
4 [[24 6] [16 6] [8 6] [0 3] ~]
==
|=([p=@ q=@] [q (cut 0 [p q] a)])
$(a (rsh 3 b a))
::
++ tuba :: utf8 to utf32 tape
|= a=tape
^- (list ,@c)
(rip 5 (turf (rap 3 a))) :: XX horrible
::
++ tufa :: utf32 to utf8 tape
|= a=(list ,@c)
^- tape
?~ a ""
(weld (rip 3 (tuft i.a)) $(a t.a))
::
++ tuft :: utf32 to utf8 text
|= a=@c
^- @t
%+ rap 3
|- ^- (list ,@)
?: =(0 a)
~
=+ b=(end 5 1 a)
=+ c=$(a (rsh 5 1 a))
?: (lth b 0x7f)
[b c]
?: (lth b 0x7ff)
:* (mix 0b1100.0000 (cut 0 [6 5] b))
(mix 0b1000.0000 (end 0 6 b))
c
==
?: (lth b 0xffff)
:* (mix 0b1110.0000 (cut 0 [12 4] b))
(mix 0b1000.0000 (cut 0 [6 6] b))
(mix 0b1000.0000 (end 0 6 b))
c
==
:* (mix 0b1111.0000 (cut 0 [18 3] b))
(mix 0b1000.0000 (cut 0 [12 6] b))
(mix 0b1000.0000 (cut 0 [6 6] b))
(mix 0b1000.0000 (end 0 6 b))
c
==
::
++ wack
|= a=@ta
^- @ta
=+ b=(rip 3 a)
%+ rap 3
|- ^- tape
?~ b
~
?: =('~' i.b) ['~' '~' $(b t.b)]
?: =('_' i.b) ['~' '-' $(b t.b)]
[i.b $(b t.b)]
::
++ wick
|= a=@
^- @ta
=+ b=(rip 3 a)
%+ rap 3
|- ^- tape
?~ b
~
?: =('~' i.b)
?~ t.b !!
[?:(=('~' i.t.b) '~' ?>(=('-' i.t.b) '_')) $(b t.t.b)]
[i.b $(b t.b)]
::
++ woad
|= a=@ta
^- @t
%+ rap 3
|- ^- (list ,@)
?: =(0 a)
~
=+ b=(end 3 1 a)
=+ c=(rsh 3 1 a)
?: =('.' b)
[' ' $(a c)]
2013-09-29 00:21:18 +04:00
?. =('~' b)
[b $(a c)]
2013-09-29 00:21:18 +04:00
=> .(b (end 3 1 c), c (rsh 3 1 c))
?+ b =- (weld (rip 3 (tuft p.d)) $(a q.d))
^= d
=+ d=0
|- ^- [p=@ q=@]
2013-12-08 06:55:03 +04:00
?: =('.' b)
[d c]
2013-09-29 00:21:18 +04:00
?< =(0 c)
%= $
2013-12-08 06:55:03 +04:00
b (end 3 1 c)
c (rsh 3 1 c)
d %+ add (mul 16 d)
%+ sub b
?: &((gte b '0') (lte b '9')) 48
?>(&((gte b 'a') (lte b 'z')) 87)
2013-09-29 00:21:18 +04:00
==
2013-12-15 10:46:41 +04:00
%'.' ['.' $(a c)]
%'~' ['~' $(a c)]
==
2013-09-29 00:21:18 +04:00
::
++ wood
|= a=@t
^- @ta
%+ rap 3
|- ^- (list ,@)
?: =(0 a)
2013-09-29 00:21:18 +04:00
~
=+ b=(teff a)
=+ c=(turf (end 3 b a))
=+ d=$(a (rsh 3 b a))
?: ?| &((gte c 'a') (lte c 'z'))
2013-09-29 00:21:18 +04:00
&((gte c '0') (lte c '9'))
=('-' c)
==
[c d]
?+ c
2013-12-15 10:46:41 +04:00
:- '~'
=+ e=(met 2 c)
|- ^- tape
?: =(0 c)
['.' d]
=. e (dec e)
=+ f=(rsh 2 e c)
[(add ?:((lte f 9) 48 87) f) $(c (end 2 e c))]
::
%' ' ['.' d]
%'.' ['~' '.' d]
%'~' ['~' '~' d]
2013-09-29 00:21:18 +04:00
==
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eK, formatting (layout) ::
::
++ re
|_ tac=tank
++ ram
^- tape
?- -.tac
%leaf p.tac
%palm ram(tac [%rose [p.p.tac (weld q.p.tac r.p.tac) s.p.tac] q.tac])
%rose
%+ weld
q.p.tac
|- ^- tape
?@ q.tac
r.p.tac
=+ voz=$(q.tac t.q.tac)
(weld ram(tac i.q.tac) ?@(t.q.tac voz (weld p.p.tac voz)))
==
::
++ win
|= [tab=@ edg=@]
=+ lug=`wall`~
|^ |- ^- wall
?- -.tac
%leaf (rig p.tac)
%palm
2013-09-29 00:21:18 +04:00
?: fit
(rig ram)
?@ q.tac
(rig q.p.tac)
?@ t.q.tac
(rig(tab (add 2 tab), lug $(tac i.q.tac)) q.p.tac)
=> .(q.tac `(list tank)`q.tac)
=+ lyn=(mul 2 (lent q.tac))
=+ ^= qyr
|- ^- wall
?@ q.tac
lug
%= ^$
2014-01-04 11:28:16 +04:00
tac i.q.tac
tab (add tab (sub lyn 2))
lug $(q.tac t.q.tac, lyn (sub lyn 2))
2013-09-29 00:21:18 +04:00
==
(wig(lug qyr) q.p.tac)
::
%rose
?: fit
(rig ram)
=+ ^= gyl
|- ^- wall
?@ q.tac
?:(=(%$ r.p.tac) lug (rig r.p.tac))
^$(tac i.q.tac, lug $(q.tac t.q.tac), tab din)
?: =(%$ q.p.tac)
gyl
(wig(lug gyl) q.p.tac)
==
::
++ din (mod (add 2 tab) (mul 2 (div edg 3)))
++ fit (lte (lent ram) (sub edg tab))
++ rig
|= hom=tape
^- wall
?: (lte (lent hom) (sub edg tab))
[(runt [tab ' '] hom) lug]
=> .(tab (add tab 2), edg (sub edg 2))
=+ mut=(trim (sub edg tab) hom)
:- (runt [(sub tab 2) ' '] ['\\' '/' (weld p.mut `_hom`['\\' '/' ~])])
=> .(hom q.mut)
|-
?@ hom
:- %+ runt
[(sub tab 2) ' ']
2013-09-29 00:21:18 +04:00
['\\' '/' (runt [(sub edg tab) ' '] ['\\' '/' ~])]
lug
=> .(mut (trim (sub edg tab) hom))
[(runt [tab ' '] p.mut) $(hom q.mut)]
::
++ wig
|= hom=tape
^- wall
?@ lug
(rig hom)
=+ lin=(lent hom)
=+ wug=:(add 1 tab lin)
?. =+ mir=i.lug
|- ?@ mir
2013-09-29 00:21:18 +04:00
|
?|(=(0 wug) ?&(=(' ' i.mir) $(mir t.mir, wug (dec wug))))
(rig hom)
[(runt [tab ' '] (weld hom `tape`[' ' (slag wug i.lug)])) t.lug]
--
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eL, formatting (path) ::
::
++ ab
2013-09-29 00:21:18 +04:00
|%
++ bix (bass 16 (stun [2 2] six))
++ hif (boss 256 ;~(plug tip tiq (easy ~)))
++ huf %+ cook
2013-09-29 00:21:18 +04:00
|=([a=@ b=@] (wred:un ~(zug mu ~(zag mu [a b]))))
;~(plug hif ;~(pfix hep hif))
++ hyf (bass 0x1.0000.0000 ;~(plug huf ;~(pfix hep huf) (easy ~)))
++ pev (bass 32 ;~(plug sev (stun [0 4] siv)))
++ pew (bass 64 ;~(plug sew (stun [0 4] siw)))
++ piv (bass 32 (stun [5 5] siv))
++ piw (bass 64 (stun [5 5] siw))
++ qeb (bass 2 ;~(plug seb (stun [0 3] sib)))
++ qex (bass 16 ;~(plug sex (stun [0 3] hit)))
++ qib (bass 2 (stun [4 4] sib))
++ qix (bass 16 (stun [4 4] six))
++ seb (cold 1 (just '1'))
++ sed (cook |=(a=@ (sub a '0')) (shim '1' '9'))
++ sev ;~(pose sed sov)
++ sew ;~(pose sed sow)
++ sex ;~(pose sed sox)
++ sib (cook |=(a=@ (sub a '0')) (shim '0' '1'))
++ siq ;~ pose
(shim 'a' 'z')
(shim 'A' 'Z')
(shim '0' '9')
hep
(cold 32 dot)
;~(pfix sig ;~(pose sig dot bix))
==
++ sid (cook |=(a=@ (sub a '0')) (shim '0' '9'))
++ siv ;~(pose sid sov)
++ siw ;~(pose sid sow)
++ six ;~(pose sid sox)
++ sov (cook |=(a=@ (sub a 87)) (shim 'a' 'v'))
++ sow ;~ pose
(cook |=(a=@ (sub a 87)) (shim 'a' 'z'))
(cook |=(a=@ (sub a 29)) (shim 'A' 'Z'))
(cold 62 (just '-'))
(cold 63 (just '~'))
==
++ sox (cook |=(a=@ (sub a 87)) (shim 'a' 'f'))
++ ted (bass 10 ;~(plug sed (stun [0 2] sid)))
++ tip (sear |=(a=@ (ins:po a)) til)
++ tiq (sear |=(a=@ (ind:po a)) til)
++ tid (bass 10 (stun [3 3] sid))
++ til (boss 256 (stun [3 3] low))
++ urs %+ cook
|=(a=tape (rap 3 ^-((list ,@) a)))
(star ;~(pose nud low hep dot sig cab))
2014-03-20 05:05:42 +04:00
++ urt %+ cook
|=(a=tape (rap 3 ^-((list ,@) a)))
(star ;~(pose nud low hep dot sig))
2013-09-29 00:21:18 +04:00
++ voy ;~(pfix bas ;~(pose bas soq bix))
++ vym (bass 256 ;~(plug low (star ;~(pose low nud))))
++ vyn (bass 256 ;~(plug hep vym (easy ~)))
--
++ ag
|%
2013-12-21 06:35:33 +04:00
++ ape |*(fel=_rule ;~(pose (cold 0 (just '0')) fel))
2013-09-29 00:21:18 +04:00
++ bay (ape (bass 16 ;~(plug qeb:ab (star ;~(pfix dog qib:ab)))))
2013-12-09 02:40:16 +04:00
++ bip =+ tod=(ape qex:ab)
(bass 0x1.0000 ;~(plug tod (stun [7 7] ;~(pfix dog tod))))
2013-09-29 00:21:18 +04:00
++ dem (ape (bass 1.000 ;~(plug ted:ab (star ;~(pfix dog tid:ab)))))
++ dim (ape (bass 10 ;~(plug sed:ab (star sid:ab))))
++ dum (bass 10 (plus sid:ab))
++ fed ;~ pose
(bass 0x1.0000.0000.0000.0000 (most doh hyf:ab))
huf:ab
hif:ab
tiq:ab
==
++ hex (ape (bass 0x1.0000 ;~(plug qex:ab (star ;~(pfix dog qix:ab)))))
++ lip =+ tod=(ape ted:ab)
2013-09-29 00:21:18 +04:00
(bass 256 ;~(plug tod (stun [3 3] ;~(pfix dog tod))))
++ qut %+ ifix [soq soq]
%+ boss 256
%- star ;~ pose
;~(pfix bas ;~(pose bas soq bix:ab))
;~(pose (shim 32 38) (shim 40 91) (shim 93 126))
==
++ sym (cook |=(a=(list ,@) (rap 3 a)) ;~(plug vym:ab (star vyn:ab)))
++ tyq (cook |=(a=(list ,@) (rap 3 a)) (plus siq:ab))
++ viz (ape (bass 0x200.0000 ;~(plug pev:ab (star ;~(pfix dog piv:ab)))))
2014-03-20 05:05:42 +04:00
++ vum (bass 32 (plus siv:ab))
2013-09-29 00:21:18 +04:00
++ wiz (ape (bass 0x4000.0000 ;~(plug pew:ab (star ;~(pfix dog piw:ab)))))
--
::
++ co
=< |_ lot=coin
++ rear |=(rom=tape =>(.(rex rom) rend))
++ rent `@ta`(rap 3 rend)
++ rend
^- tape
?: ?=(%blob -.lot)
2014-03-20 05:05:42 +04:00
['~' '0' ((v-co 1) (jam p.lot))]
2013-09-29 00:21:18 +04:00
?: ?=(%many -.lot)
2014-01-04 11:28:16 +04:00
:- '.'
2013-09-29 00:21:18 +04:00
|- ^- tape
?~ p.lot
['_' '_' rex]
2014-03-20 05:05:42 +04:00
['_' (weld (trip (wack rent(lot i.p.lot))) $(p.lot t.p.lot))]
2013-09-29 00:21:18 +04:00
=+ [yed=(end 3 1 p.p.lot) hay=(cut 3 [1 1] p.p.lot)]
|- ^- tape
?+ yed (z-co q.p.lot)
%c ['~' '-' (weld (rip 3 (wood (tuft q.p.lot))) rex)]
%d
?+ hay (z-co q.p.lot)
%a
=+ yod=(yore q.p.lot)
=> ^+(. .(rex ?~(f.t.yod rex ['.' (s-co f.t.yod)])))
=> ^+ .
%= .
rex
?: &(=(~ f.t.yod) =(0 h.t.yod) =(0 m.t.yod) =(0 s.t.yod))
rex
=> .(rex ['.' (y-co s.t.yod)])
=> .(rex ['.' (y-co m.t.yod)])
['.' '.' (y-co h.t.yod)]
==
=> .(rex ['.' (a-co d.t.yod)])
=> .(rex ['.' (a-co m.yod)])
=> .(rex ?:(a.yod rex ['-' rex]))
['~' (a-co y.yod)]
::
%r
=+ yug=(yell q.p.lot)
=> ^+(. .(rex ?~(f.yug rex ['.' (s-co f.yug)])))
:- '~'
?: &(=(0 d.yug) =(0 m.yug) =(0 h.yug) =(0 s.yug))
['.' 's' '0' rex]
=> ^+(. ?:(=(0 s.yug) . .(rex ['.' 's' (a-co s.yug)])))
=> ^+(. ?:(=(0 m.yug) . .(rex ['.' 'm' (a-co m.yug)])))
=> ^+(. ?:(=(0 h.yug) . .(rex ['.' 'h' (a-co h.yug)])))
=> ^+(. ?:(=(0 d.yug) . .(rex ['.' 'd' (a-co d.yug)])))
+.rex
==
::
%f
?: =(& q.p.lot)
['.' 'y' rex]
2013-09-29 00:21:18 +04:00
?:(=(| q.p.lot) ['.' 'n' rex] (z-co q.p.lot))
::
%n ['~' rex]
%i
?+ hay (z-co q.p.lot)
%f ((ro-co [3 10 4] |=(a=@ ~(d ne a))) q.p.lot)
%s ((ro-co [4 16 8] |=(a=@ ~(x ne a))) q.p.lot)
==
::
%p
=+ dyx=(met 3 q.p.lot)
:- '~'
?: (lte dyx 1)
(weld (trip (tod:po q.p.lot)) rex)
?: =(2 dyx)
;: weld
2013-09-29 00:21:18 +04:00
(trip (tos:po (end 3 1 q.p.lot)))
(trip (tod:po (rsh 3 1 q.p.lot)))
rex
==
=+ [dyz=(met 5 q.p.lot) fin=|]
|- ^- tape
?: =(0 dyz)
rex
%= $
fin &
dyz (dec dyz)
q.p.lot (rsh 5 1 q.p.lot)
rex
=+ syb=(wren:un (end 5 1 q.p.lot))
=+ cog=~(zig mu [(rsh 4 1 syb) (end 4 1 syb)])
;: weld
(trip (tos:po (end 3 1 p.cog)))
(trip (tod:po (rsh 3 1 p.cog)))
`tape`['-' ~]
(trip (tos:po (end 3 1 q.cog)))
(trip (tod:po (rsh 3 1 q.cog)))
`tape`?:(fin ['-' ?:(=(1 (end 0 1 dyz)) ~ ['-' ~])] ~)
rex
==
==
::
%r
?+ hay (z-co q.p.lot)
%d ['.' '~' (r-co (rlyd q.p.lot))]
%h ['.' '~' '~' (r-co (rlyh q.p.lot))]
%q ['.' '~' '~' '~' (r-co (rlyq q.p.lot))]
%s ['.' (r-co (rlys q.p.lot))]
==
::
%u
=- (weld p.gam ?:(=(0 q.p.lot) `tape`['0' ~] q.gam))
^= gam ^- [p=tape q=tape]
?+ hay [~ ((ox-co [10 3] |=(a=@ ~(d ne a))) q.p.lot)]
%b [['0' 'b' ~] ((ox-co [2 4] |=(a=@ ~(d ne a))) q.p.lot)]
2014-04-16 04:49:11 +04:00
%i [['0' 'i' ~] ((d-co 1) q.p.lot)]
2013-09-29 00:21:18 +04:00
%x [['0' 'x' ~] ((ox-co [16 4] |=(a=@ ~(x ne a))) q.p.lot)]
%v [['0' 'v' ~] ((ox-co [32 5] |=(a=@ ~(x ne a))) q.p.lot)]
%w [['0' 'w' ~] ((ox-co [64 5] |=(a=@ ~(w ne a))) q.p.lot)]
==
::
%s
%+ weld
?:((syn:si q.p.lot) "--" "-")
$(yed 'u', q.p.lot (abs:si q.p.lot))
::
%t
?: =('a' hay)
?: =('s' (cut 3 [2 1] p.p.lot))
(weld (rip 3 q.p.lot) rex)
2014-03-20 05:05:42 +04:00
['~' '.' (weld (rip 3 q.p.lot) rex)]
2013-09-29 00:21:18 +04:00
['~' '~' (weld (rip 3 (wood q.p.lot)) rex)]
==
--
=+ rex=*tape
=< |%
++ a-co |=(dat=@ ((d-co 1) dat))
++ d-co |=(min=@ (em-co [10 min] |=([? b=@ c=tape] [~(d ne b) c])))
++ r-co
|= [syn=? nub=@ der=@]
=> .(rex ['.' ((d-co 1) der)])
=> .(rex ((d-co 1) nub))
?:(syn rex ['-' rex])
::
++ s-co
|= esc=(list ,@) ^- tape
~| [%so-co esc]
?~ esc
rex
:- '.'
=>(.(rex $(esc t.esc)) ((x-co 4) i.esc))
::
2014-03-20 05:05:42 +04:00
++ v-co |=(min=@ (em-co [32 min] |=([? b=@ c=tape] [~(v ne b) c])))
2013-09-29 00:21:18 +04:00
++ w-co |=(min=@ (em-co [64 min] |=([? b=@ c=tape] [~(w ne b) c])))
++ x-co |=(min=@ (em-co [16 min] |=([? b=@ c=tape] [~(x ne b) c])))
++ y-co |=(dat=@ ((d-co 2) dat))
++ z-co |=(dat=@ `tape`['0' 'x' ((x-co 1) dat)])
--
|%
2013-09-29 00:21:18 +04:00
++ em-co
2013-12-16 05:15:04 +04:00
|= [[bas=@ min=@] [par=$+([? @ tape] tape)]]
2013-09-29 00:21:18 +04:00
|= hol=@
^- tape
?: &(=(0 hol) =(0 min))
rex
=+ [rad=(mod hol bas) dar=(div hol bas)]
%= $
min ?:(=(0 min) 0 (dec min))
hol dar
rex (par =(0 dar) rad rex)
==
::
++ ox-co
2013-12-16 05:15:04 +04:00
|= [[bas=@ gop=@] dug=$+(@ @)]
2013-09-29 00:21:18 +04:00
%+ em-co
[|-(?:(=(0 gop) 1 (mul bas $(gop (dec gop))))) 0]
|= [top=? seg=@ res=tape]
%+ weld
?:(top ~ `tape`['.' ~])
%. seg
%+ em-co(rex res)
[bas ?:(top 0 gop)]
2013-09-29 00:21:18 +04:00
|=([? b=@ c=tape] [(dug b) c])
::
++ ro-co
2013-12-16 05:15:04 +04:00
|= [[buz=@ bas=@ dop=@] dug=$+(@ @)]
2013-09-29 00:21:18 +04:00
|= hol=@
^- tape
?: =(0 dop)
rex
=> .(rex $(dop (dec dop)))
:- '.'
%- (em-co [bas 1] |=([? b=@ c=tape] [(dug b) c]))
[(cut buz [(dec dop) 1] hol)]
--
::
++ ne
|_ tig=@
++ d (add tig '0')
++ x ?:((gte tig 10) (add tig 87) d)
2014-03-20 05:05:42 +04:00
++ v ?:((gte tig 10) (add tig 87) d)
2013-09-29 00:21:18 +04:00
++ w ?:(=(tig 63) '~' ?:(=(tig 62) '-' ?:((gte tig 36) (add tig 29) x)))
--
::
++ mu
|_ [top=@ bot=@]
++ zag [p=(end 4 1 (add top bot)) q=bot]
++ zig [p=(end 4 1 (add top (sub 0x1.0000 bot))) q=bot]
++ zug (mix (lsh 4 1 top) bot)
--
::
++ so
|%
2013-09-29 00:21:18 +04:00
++ bisk
;~ pose
;~ pfix (just '0')
;~ pose
(stag %ub ;~(pfix (just 'b') bay:ag))
2014-04-16 04:49:11 +04:00
(stag %ui ;~(pfix (just 'i') dim:ag))
2013-09-29 00:21:18 +04:00
(stag %ux ;~(pfix (just 'x') hex:ag))
(stag %uv ;~(pfix (just 'v') viz:ag))
(stag %uw ;~(pfix (just 'w') wiz:ag))
==
==
(stag %ud dem:ag)
==
++ crub
;~ pose
%+ cook
|=(det=date `dime`[%da (year det)])
;~ plug
%+ cook
|=([a=@ b=?] [b a])
;~(plug dim:ag ;~(pose (cold | hep) (easy &)))
;~(pfix dot dim:ag) :: month
;~(pfix dot dim:ag) :: day
;~ pose
;~ pfix
;~(plug dot dot)
;~ plug
dum:ag
;~(pfix dot dum:ag)
;~(pfix dot dum:ag)
;~(pose ;~(pfix ;~(plug dot dot) (most dot qix:ab)) (easy ~))
==
==
(easy [0 0 0 ~])
==
==
::
%+ cook
|= [a=(list ,[p=?(%d %h %m %s) q=@]) b=(list ,@)]
=+ rop=`tarp`[0 0 0 0 b]
|- ^- dime
?~ a
[%dr (yule rop)]
?- p.i.a
%d $(a t.a, d.rop (add q.i.a d.rop))
%h $(a t.a, h.rop (add q.i.a h.rop))
%m $(a t.a, m.rop (add q.i.a m.rop))
%s $(a t.a, s.rop (add q.i.a s.rop))
==
;~ plug
%+ most
dot
;~ pose
2013-09-29 00:21:18 +04:00
;~(pfix (just 'd') (stag %d dim:ag))
;~(pfix (just 'h') (stag %h dim:ag))
;~(pfix (just 'm') (stag %m dim:ag))
;~(pfix (just 's') (stag %s dim:ag))
==
;~(pose ;~(pfix ;~(plug dot dot) (most dot qix:ab)) (easy ~))
==
::
(stag %p fed:ag)
2014-03-20 05:05:42 +04:00
;~(pfix dot (stag %ta urs:ab))
2013-09-29 00:21:18 +04:00
;~(pfix sig (stag %t (cook woad urs:ab)))
;~(pfix hep (stag %c (cook turf (cook woad urs:ab))))
==
++ nuck
%+ knee *coin |. ~+
%- stew
^. stet ^. limo
:~ :- ['a' 'z'] (cook |=(a=@ta [~ %tas a]) sym)
:- ['0' '9'] (stag ~ bisk)
:- '-' (stag ~ tash)
:- '.' ;~(pfix dot perd)
:- '~' ;~(pfix sig ;~(pose twid (easy [~ %n 0])))
2013-09-29 00:21:18 +04:00
==
2014-03-20 05:05:42 +04:00
++ nusk
(sear |=(a=@ta (rush (wick a) nuck)) urt:ab)
2013-09-29 00:21:18 +04:00
++ perd
;~ pose
(stag ~ zust)
2014-03-20 05:05:42 +04:00
(stag %many (ifix [cab ;~(plug cab cab)] (more cab nusk)))
2013-09-29 00:21:18 +04:00
==
++ royl
=+ ^= vox
;~ plug
;~(pose (cold | hep) (easy &))
;~(plug dim:ag ;~(pose ;~(pfix dot dim:ag) (easy 0)))
==
;~ pose
(stag %rh (cook rylh ;~(pfix ;~(plug sig sig) vox)))
(stag %rq (cook rylq ;~(pfix ;~(plug sig sig sig) vox)))
(stag %rd (cook ryld ;~(pfix sig vox)))
(stag %rs (cook ryls vox))
==
++ tash
=+ ^= neg
|= [syn=? mol=dime] ^- dime
?> =('u' (end 3 1 p.mol))
[(cat 3 's' (rsh 3 1 p.mol)) (new:si syn q.mol)]
;~ pfix hep
;~ pose
(cook |=(a=dime (neg | a)) bisk)
;~(pfix hep (cook |=(a=dime (neg & a)) bisk))
==
==
++ twid
;~ pose
2014-03-20 05:05:42 +04:00
(cook |=(a=@ [%blob (cue a)]) ;~(pfix (just '0') vum:ag))
2013-09-29 00:21:18 +04:00
(stag ~ crub)
==
::
++ zust
;~ pose
(stag %is bip:ag)
(stag %if lip:ag)
(stag %f ;~(pose (cold & (just 'y')) (cold | (just 'n'))))
royl
==
--
++ scot |=(mol=dime ~(rent co %$ mol))
++ scow |=(mol=dime ~(rend co %$ mol))
++ slaw
|= [mod=@tas txt=@ta]
^- (unit ,@)
=+ con=(slay txt)
?.(&(?=([~ %$ @ @] con) =(p.p.u.con mod)) ~ [~ q.p.u.con])
::
++ slay
|= txt=@ta ^- (unit coin)
=+ vex=((full nuck:so) [[1 1] (trip txt)])
?@ q.vex
~
[~ p.u.q.vex]
::
++ smyt
|= bon=path ^- tank
:+ %rose [['/' ~] ['/' ~] ['/' ~]]
|- ^- (list tank)
(turn bon |=(a=@ [%leaf (rip 3 a)]))
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
2014-04-10 00:35:28 +04:00
:: section 2eM, regular-expressions ::
::
++ pars
|= [a=tape] :: parse tape to rege
^- (unit rege)
=+ foo=((full anns) [[1 1] a])
?@ q.foo
~
[~ p.u.q.foo]
::
++ nor
;~ pose
(shim 1 35)
(shim 37 39)
(shim 44 45)
(shim 47 62)
(shim 64 90)
(shim 93 93)
(shim 95 122)
(shim 123 123)
(shim 125 127)
==
++ les ;~(pose (shim 32 91) (shim 93 126))
++ lep ;~(pose (shim 32 45) (shim 46 90) (shim 95 126))
++ alm (shim 32 126)
++ alb ;~(pose (shim 32 92) (shim 94 126))
++ mis ;~(pose (shim 32 47) (shim 58 64) (shim 91 96) (shim 123 126))
::
++ anns :: top level rege parse
%+ knee *rege |. ~+
;~ pose
;~((bend |=(a=[rege rege] (some [%eith a]))) mall ;~(pfix bar anns))
(stag %eith ;~(plug (easy %empt) ;~(pfix bar anns)))
(easy %empt)
==
::
++ mall
%+ knee *rege |. ~+
;~((bend |=(a=[rege rege] (some [%pair a]))) bets mall)
::
++ bets
%+ knee *rege |. ~+
|= tub=nail
=+ vex=(chun tub)
?~ q.vex
vex
=+ a=p.u.q.vex
%- ;~ pose
(cold [%eith %empt a] (jest '??'))
(cold [%manl a] (jest '*?'))
(cold [%plll a] (jest '+?'))
(cold [%eith a %empt] wut)
(cold [%mant a] tar)
(cold [%plls a] lus)
2014-04-10 03:25:11 +04:00
(stag %betl ;~(plug (easy a) ;~(sfix rang wut)))
2014-04-10 00:35:28 +04:00
(stag %betw ;~(plug (easy a) rang))
(stag %binl ;~(plug (easy a) (ifix [kel (jest ',}?')] dim:ag)))
(stag %bant ;~(plug (easy a) (ifix [kel (jest '}?')] dim:ag)))
2014-04-10 03:25:11 +04:00
(stag %bant ;~(plug (easy a) (ifix [kel ker] dim:ag)))
2014-04-10 00:35:28 +04:00
(stag %bint ;~(plug (easy a) (ifix [kel (jest ',}')] dim:ag)))
(easy a)
==
q.u.q.vex
::
++ ranc
|= [a=@ b=@]
^- @
?:((gth a b) 0 (con (bex a) $(a +(a))))
::
++ flap |=(a=@ (mix a (dec (bex 256))))
::
++ rang
%+ sear |=([a=@ b=@] ?:((lte a b) (some [a b]) ~))
(ifix [kel ker] ;~(plug dim:ag ;~(pfix com dim:ag)))
::
++ chun
%+ knee *rege |. ~+
;~ pose
(cold %ende buc)
(cold %sart ket)
(cold %dote dot)
%+ cook |=(a=(list char) (reel a |=([p=char q=rege] [%pair [%lite p] q])))
;~(pfix (jest '\\Q') cape)
|= tub=nail
=+ foo=;~(plug kel dim:ag ;~(pose ker (jest ',}') ;~(plug com dim:ag ker)))
=+ bar=(foo tub)
?~(q.bar (chad tub) (fail tub))
(cook |=([a=rege] [%capt a 0]) (ifix [pel per] anns))
%+ cook |=([a=rege] [%capt a 0])
(ifix [;~(plug (jest '(?P<') (plus aln) gar) per] anns)
(ifix [(jest '(?:') per] anns)
(stag %brac ;~(pfix sel seac))
==
::
++ seac
|= tub=nail
?~ q.tub
(fail tub)
?: =(i.q.tub '^')
(;~(pfix ket (cook flap sead)) tub)
(sead tub)
::
++ sead
%+ knee *@ |. ~+
;~ pose
|= tub=nail
?~ q.tub
(fail tub)
?. =(i.q.tub ']')
(fail tub)
?~ t.q.tub
(fail tub)
?: =(i.t.q.tub '-')
?~ t.t.q.tub
(fail tub)
?: =(i.t.t.q.tub ']')
(;~(pfix ser (cook |=(a=@ (con (bex ']') a)) sade)) tub)
(fail tub)
(;~(pfix ser (cook |=(a=@ (con (bex ']') a)) sade)) tub)
|= tub=nail
?~ q.tub
(fail tub)
?. =(i.q.tub '-')
(fail tub)
?~ t.q.tub
(fail tub)
?: =(i.t.q.tub '-')
?~ t.t.q.tub
(fail tub)
?: =(i.t.t.q.tub ']')
(;~(pfix hep (cook |=(a=@ (con (bex '-') a)) sade)) tub)
(fail tub)
(;~(pfix hep (cook |=(a=@ (con (bex '-') a)) sade)) tub)
(cook |=(a=[@ @] (con a)) ;~(plug seap sade))
==
::
++ sade
%+ knee *@ |. ~+
;~ pose
(cold (bex '-') (jest '-]'))
(cold 0 ser)
(cook |=([p=@ q=@] `@`(con p q)) ;~(plug seap sade))
==
::
++ seap
%+ knee *@ |. ~+
;~ pose
unid
(cold lower (jest '[:lower:]'))
(cold upper (jest '[:upper:]'))
(cold digit (jest '[:digit:]'))
(cold print (jest '[:print:]'))
(cold graph (jest '[:graph:]'))
(cold blank (jest '[:blank:]'))
(cold space (jest '[:space:]'))
(cold cntrl (jest '[:cntrl:]'))
(cold alpha (jest '[:alpha:]'))
(cold xdigit (jest '[:xdigit:]'))
(cold alnum (jest '[:alnum:]'))
(cold punct (jest '[:punct:]'))
(cold (flap lower) (jest '[:^lower:]'))
(cold (flap upper) (jest '[:^upper:]'))
(cold (flap digit) (jest '[:^digit:]'))
(cold (flap print) (jest '[:^print:]'))
(cold (flap graph) (jest '[:^graph:]'))
(cold (flap blank) (jest '[:^blank:]'))
(cold (flap space) (jest '[:^space:]'))
(cold (flap cntrl) (jest '[:^cntrl:]'))
(cold (flap alpha) (jest '[:^alpha:]'))
(cold (flap xdigit) (jest '[:^xdigit:]'))
(cold (flap alnum) (jest '[:^alnum:]'))
(cold (flap punct) (jest '[:^punct:]'))
%+ sear |=([a=@ b=@] ?:((gth a b) ~ (some (ranc a b))))
;~(plug alm ;~(pfix hep alb))
|= tub=nail
?~ q.tub
(fail tub)
?~ t.q.tub
((cook bex les) tub)
?: =(i.t.q.tub '-')
?~ t.t.q.tub
((cook bex les) tub)
?: =(i.t.t.q.tub ']')
((cook bex les) tub)
(fail tub)
((cook bex les) tub)
;~(pfix bas escd)
==
::
++ cape
%+ knee *tape |. ~+
;~ pose
(cold ~ (jest '\\E'))
;~(plug next cape)
(cook |=(a=char (tape [a ~])) next)
(full (easy ~))
2014-04-10 03:25:11 +04:00
==
2014-04-10 00:35:28 +04:00
::
++ lower (ranc 'a' 'z')
++ upper (ranc 'A' 'Z')
++ digit (ranc '0' '9')
++ print (ranc 32 126)
++ graph (ranc 33 126)
++ blank (con (bex 32) (bex 9))
++ space :(con (ranc 9 13) (bex ' '))
++ cntrl :(con (ranc 0 31) (bex 127))
++ alpha :(con lower upper)
++ alnum :(con lower upper digit)
++ punct ;: con
(ranc '!' '/')
(ranc ':' '@')
(ranc '[' '`')
(ranc '{' '~')
==
++ wordc :(con digit lower upper (bex 95))
++ white :(con (bex ' ') (ranc 9 10) (ranc 12 13))
++ xdigit :(con (ranc 'a' 'f') (ranc 'A' 'F') digit)
::
++ chad
%+ knee *rege |. ~+
;~(pose (stag %lite nor) (stag %brac unid) ;~(pfix bas escp))
::
++ escd
%+ knee *@ |. ~+
;~ pose
(cold (bex 7) (just 'a'))
(cold (bex 9) (just 't'))
(cold (bex 10) (just 'n'))
(cold (bex 11) (just 'v'))
(cold (bex 12) (just 'f'))
(cold (bex 13) (just 'r'))
(cold (bex 0) (just '0'))
(sear |=(a=@ ?:((lth a 256) (some (bex a)) ~)) (bass 8 (stun [2 3] cit)))
(cook bex ;~(pfix (just 'x') (bass 16 (stun [2 2] hit))))
(cook bex (ifix [(jest 'x{') ker] (bass 16 (stun [2 2] hit))))
(cook bex mis)
==
::
++ escp
%+ knee *rege |. ~+
;~ pose
(cold %empt (just 'Q'))
(cold [%lite `@tD`0] (just '0'))
(cold [%lite `@tD`7] (just 'a'))
(cold [%lite `@tD`9] (just 't'))
(cold [%lite `@tD`10] (just 'n'))
(cold [%lite `@tD`11] (just 'v'))
(cold [%lite `@tD`12] (just 'f'))
(cold [%lite `@tD`13] (just 'r'))
(sear |=(a=@ ?:((lth a 256) (some [%lite a]) ~)) (bass 8 (stun [2 3] cit)))
(stag %lite ;~(pfix (just 'x') (bass 16 (stun [2 2] hit))))
(stag %lite (ifix [(jest 'x{') ker] (bass 16 (stun [2 2] hit))))
(cold %dote (just 'C'))
(cold %sart (just 'A'))
(cold %ende (just 'z'))
(cold %boun (just 'b'))
(cold %bout (just 'B'))
(stag %brac (cold wordc (just 'w')))
(stag %brac (cold (flap wordc) (just 'W')))
(stag %lite mis)
==
::
++ unid
%+ knee *@ |. ~+
;~ pose
(cold digit (jest '\\d'))
(cold (flap digit) (jest '\\D'))
(cold white (jest '\\s'))
(cold (flap white) (jest '\\S'))
(cold wordc (jest '\\w'))
(cold (flap wordc) (jest '\\W'))
==
::
++ proc :: capture numbering
|= [a=rege b=@]
^- [@ rege]
?- a
[%capt *] =+ foo=$(a p.a, b +(b))
[-.foo [%capt +.foo b]]
[%eith *] =+ foo=$(a p.a)
=+ bar=$(a q.a, b -.foo)
[-.bar [%eith +.foo +.bar]]
[%pair *] =+ foo=$(a p.a)
=+ bar=$(a q.a, b -.foo)
[-.bar [%pair +.foo +.bar]]
[%manl *] =+ foo=$(a p.a)
[-.foo [%manl +.foo]]
[%plll *] =+ foo=$(a p.a)
[-.foo [%plll +.foo]]
[%binl *] =+ foo=$(a p.a)
[-.foo [%binl +.foo q.a]]
[%betl *] =+ foo=$(a p.a)
[-.foo [%betl +.foo q.a r.a]]
[%mant *] =+ foo=$(a p.a)
[-.foo [%mant +.foo]]
[%plls *] =+ foo=$(a p.a)
[-.foo [%plls +.foo]]
[%bant *] =+ foo=$(a p.a)
[-.foo [%bant +.foo q.a]]
[%bint *] =+ foo=$(a p.a)
[-.foo [%bint +.foo q.a]]
[%betw *] =+ foo=$(a p.a)
[-.foo [%betw +.foo q.a r.a]]
* [b a]
==
::
++ cont
|= [a=(map ,@u tape) b=(map ,@u tape)]
(~(gas by _(map ,@u tape)) (weld (~(tap by a)) (~(tap by b))))
::
++ abor
|= [a=char b=(unit ,[tape (map ,@u tape)])]
^- (unit ,[tape (map ,@u tape)])
?~ b
b
[~ [[a -.u.b] +.u.b]]
::
++ fade
|* [a=(unit) b=*]
?~(a b a)
::
++ matc
|= [a=rege b=tape c=tape]
^- (unit (map ,@u tape))
=+ foo=`(unit ,[tape (map ,@u tape)])`(deep a b %empt c)
(bind foo |*(a=^ (~(put by +.a) 0 -.a)))
::
++ chet
|= [a=(unit ,[tape (map ,@u tape)]) b=rege c=tape d=tape]
^- (unit ,[tape (map ,@u tape)])
?~ a
a
=+ ft=u.a
?~ -.ft
a
=+ bar=(deep b (slag (lent -.ft) c) %empt d)
?~ bar
bar
a
++ blak (some ["" _(map ,@u tape)])
++ deep
|= [a=rege b=tape c=rege d=tape]
^- (unit ,[tape (map ,@u tape)])
?- a
%dote ?~(b ~ (some [[i.b ~] _(map ,@u tape)]))
%ende ?~(b blak ~)
%sart ?:(=(b d) blak ~)
%empt blak
%boun =+ ^= luc
?: =(b d)
&
=+ foo=(slag (dec (sub (lent d) (lent b))) d)
=((dis wordc (bex -.foo)) 0)
=+ cuc=?~(b & =((dis wordc (bex -.b)) 0))
?:(!=(luc cuc) blak ~)
%bout =+ ^= luc
?: =(b d)
&
=+ foo=(slag (dec (sub (lent d) (lent b))) d)
=((dis wordc (bex -.foo)) 0)
=+ cuc=?~(b & =((dis wordc (bex -.b)) 0))
?:(=(luc cuc) blak ~)
[%capt *] =+ foo=$(a p.a)
?~ foo
foo
=+ ft=u.foo
=+ bar=$(a c, b (slag (lent -.ft) b), c %empt)
?~ bar
bar
[~ [-.ft (~(put by +.ft) q.a -.ft)]]
[%lite *] ?~(b ~ ?:(=(i.b p.a) (some [[i.b ~] _(map ,@u tape)]) ~))
[%brac *] ?~ b
~
?. =((dis (bex `@`i.b) p.a) 0)
(some [[i.b ~] _(map ,@u tape)])
~
[%eith *] =+ foo=(chet $(a p.a) c b d)
=+ bar=(chet $(a q.a) c b d)
?~ foo
bar
?~ bar
foo
=+ ft=u.foo
=+ bt=u.bar
?: (gte (lent -.ft) (lent -.bt))
foo
bar
[%pair *] =+ foo=$(a p.a, c [%pair q.a c])
?~ foo
foo
=+ ft=u.foo
=+ bar=$(a q.a, b (slag (lent -.ft) b))
?~ bar
bar
=+ bt=u.bar
[~ [(weld -.ft -.bt) (cont +.ft +.bt)]]
[%manl *] =+ foo=$(a p.a)
?~ foo
blak
?~ -.u.foo
blak
$(a [%eith %empt [%pair p.a [%eith %empt a]]])
[%mant *] =+ foo=$(a p.a)
?~ foo
blak
=+ ft=u.foo
?~ -.ft
blak
$(a [%eith [%pair p.a [%eith a %empt]] %empt])
[%plls *] $(a [%pair p.a [%mant p.a]])
[%plll *] $(a [%pair p.a [%manl p.a]])
[%binl *] =+ min=?:(=(q.a 0) 0 (dec q.a))
?: =(q.a 0)
$(a [%manl p.a])
$(a [%pair p.a [%binl p.a min]])
[%bant *] ?: =(0 q.a)
blak
$(a [%pair p.a [%bant p.a (dec q.a)]])
[%bint *] =+ min=?:(=(q.a 0) 0 (dec q.a))
?: =(q.a 0)
$(a [%mant p.a])
$(a [%pair p.a [%bint p.a min]])
[%betw *] ?: =(0 r.a)
blak
?: =(q.a 0)
$(a [%eith [%pair p.a [%betw p.a 0 (dec r.a)]] %empt])
$(a [%pair p.a [%betw p.a (dec q.a) (dec r.a)]])
[%betl *] ?: =(0 r.a)
blak
?: =(q.a 0)
$(a [%eith %empt [%pair p.a [%betl p.a 0 (dec r.a)]]])
$(a [%pair p.a [%betl p.a (dec q.a) (dec r.a)]])
==
::
++ rexp :: Regex match
~/ %rexp
|= [a=tape b=tape]
^- (unit (unit (map ,@u tape)))
=+ ^= bar
|= [a=@ b=(map ,@u tape)]
?: =(a 0)
b
=+ c=(~(get by b) a)
?~ c
$(a (dec a), b (~(put by b) a ""))
$(a (dec a))
=+ par=(pars a)
?~ par ~
=+ poc=(proc u.par 1)
=+ c=b
|-
=+ foo=(matc +.poc c b)
?~ foo
?~ c
[~ ~]
$(c t.c)
[~ [~ (bar (dec -.poc) u.foo)]]
::
++ repg :: Global regex replace
~/ %repg
|= [a=tape b=tape c=tape]
^- (unit tape)
=+ par=(pars a)
?~ par ~
=+ poc=(proc u.par 1)
=+ d=b
:- ~
|-
^- tape
=+ foo=(matc +.poc d b)
?~ foo
?~ d
~
[i.d $(d t.d)]
=+ ft=(need (~(get by u.foo) 0))
?~ d
c
(weld c $(d `tape`(slag (lent ft) `tape`d)))
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eN, pseudo-cryptography ::
2013-09-29 00:21:18 +04:00
::
++ un :: =(x (wred (wren x)))
|%
++ wren :: conceal structure
|= pyn=@ ^- @
=+ len=(met 3 pyn)
?: =(0 len)
0
=> .(len (dec len))
=+ mig=(zaft (xafo len (cut 3 [len 1] pyn)))
%+ can 3
%- flop ^- (list ,[@ @])
:- [1 mig]
|- ^- (list ,[@ @])
?: =(0 len)
~
=> .(len (dec len))
=+ mog=(zyft :(mix mig (end 3 1 len) (cut 3 [len 1] pyn)))
[[1 mog] $(mig mog)]
::
++ wred :: restore structure
|= cry=@ ^- @
=+ len=(met 3 cry)
?: =(0 len)
0
=> .(len (dec len))
=+ mig=(cut 3 [len 1] cry)
%+ can 3
%- flop ^- (list ,[@ @])
:- [1 (xaro len (zart mig))]
|- ^- (list ,[@ @])
?: =(0 len)
~
=> .(len (dec len))
=+ mog=(cut 3 [len 1] cry)
[[1 :(mix mig (end 3 1 len) (zyrt mog))] $(mig mog)]
::
++ xafo |=([a=@ b=@] +((mod (add (dec b) a) 255)))
++ xaro |=([a=@ b=@] +((mod (add (dec b) (sub 255 (mod a 255))) 255)))
::
++ zaft :: forward 255-sbox
|= a=@
=+ ^= b
0xcc.75bc.86c8.2fb1.9a42.f0b3.79a0.92ca.21f6.1e41.cde5.fcc0.
7e85.51ae.1005.c72d.1246.07e8.7c64.a914.8d69.d9f4.59c2.8038.
1f4a.dca2.6fdf.66f9.f561.a12e.5a16.f7b0.a39f.364e.cb70.7318.
1de1.ad31.63d1.abd4.db68.6a33.134d.a760.edee.5434.493a.e323.
930d.8f3d.3562.bb81.0b24.43cf.bea5.a6eb.52b4.0229.06b2.6704.
78c9.45ec.d75e.58af.c577.b7b9.c40e.017d.90c3.87f8.96fa.1153.
0372.7f30.1c32.ac83.ff17.c6e4.d36d.6b55.e2ce.8c71.8a5b.b6f3.
9d4b.eab5.8b3c.e7f2.a8fe.9574.5de0.bf20.3f15.9784.9939.5f9c.
e609.564f.d8a4.b825.9819.94aa.2c08.8e4c.9b22.477a.2840.3ed6.
3750.6ef1.44dd.89ef.6576.d00a.fbda.9ed2.3b6c.7b0c.bde9.2ade.
5c88.c182.481a.1b0f.2bfd.d591.2726.57ba
(cut 3 [(dec a) 1] b)
::
++ zart :: reverse 255-sbox
|= a=@
=+ ^= b
2013-09-29 00:21:18 +04:00
0x68.4f07.ea1c.73c9.75c2.efc8.d559.5125.f621.a7a8.8591.5613.
dd52.40eb.65a2.60b7.4bcb.1123.ceb0.1bd6.3c84.2906.b164.19b3.
1e95.5fec.ffbc.f187.fbe2.6680.7c77.d30e.e94a.9414.fd9a.017d.
3a7e.5a55.8ff5.8bf9.c181.e5b6.6ab2.35da.50aa.9293.3bc0.cdc6.
f3bf.1a58.4130.f844.3846.744e.36a0.f205.789e.32d8.5e54.5c22.
0f76.fce7.4569.0d99.d26e.e879.dc16.2df4.887f.1ffe.4dba.6f5d.
bbcc.2663.1762.aed7.af8a.ca20.dbb4.9bc7.a942.834c.105b.c4d4.
8202.3e61.a671.90e6.273d.bdab.3157.cfa4.0c2e.df86.2496.f7ed.
2b48.2a9d.5318.a343.d128.be9c.a5ad.6bb5.6dfa.c5e1.3408.128d.
2c04.0339.97a1.2ff0.49d0.eeb8.6c0a.0b37.b967.c347.d9ac.e072.
e409.7b9f.1598.1d3f.33de.8ce3.8970.8e7a
(cut 3 [(dec a) 1] b)
::
++ zyft :: forward 256-sbox
|= a=@
=+ ^= b
0xbb49.b71f.b881.b402.17e4.6b86.69b5.1647.115f.dddb.7ca5.
8371.4bd5.19a9.b092.605d.0d9b.e030.a0cc.78ba.5706.4d2d.
986a.768c.f8e8.c4c7.2f1c.effe.3cae.01c0.253e.65d3.3872.
ce0e.7a74.8ac6.daac.7e5c.6479.44ec.4143.3d20.4af0.ee6c.
c828.deca.0377.249f.ffcd.7b4f.eb7d.66f2.8951.042e.595a.
8e13.f9c3.a79a.f788.6199.9391.7fab.6200.4ce5.0758.e2f1.
7594.c945.d218.4248.afa1.e61a.54fb.1482.bea4.96a2.3473.
63c2.e7cb.155b.120a.4ed7.bfd8.b31b.4008.f329.fca3.5380.
9556.0cb2.8722.2bea.e96e.3ac5.d1bc.10e3.2c52.a62a.b1d6.
35aa.d05e.f6a8.0f3b.31ed.559d.09ad.f585.6d21.fd1d.8d67.
370b.26f4.70c1.b923.4684.6fbd.cf8b.5036.0539.9cdc.d93f.
9068.1edf.8f33.b632.d427.97fa.9ee1
(cut 3 [a 1] b)
::
++ zyrt :: reverse 256-sbox
|= a=@
=+ ^= b
2013-09-29 00:21:18 +04:00
0x9fc8.2753.6e02.8fcf.8b35.2b20.5598.7caa.c9a9.30b0.9b48.
47ce.6371.80f6.407d.00dd.0aa5.ed10.ecb7.0f5a.5c3a.e605.
c077.4337.17bd.9eda.62a4.79a7.ccb8.44cd.8e64.1ec4.5b6b.
1842.ffd8.1dfb.fd07.f2f9.594c.3be3.73c6.2cb6.8438.e434.
8d3d.ea6a.5268.72db.a001.2e11.de8c.88d3.0369.4f7a.87e2.
860d.0991.25d0.16b9.978a.4bf4.2a1a.e96c.fa50.85b5.9aeb.
9dbb.b2d9.a2d1.7bba.66be.e81f.1946.29a8.f5d2.f30c.2499.
c1b3.6583.89e1.ee36.e0b4.6092.937e.d74e.2f6f.513e.9615.
9c5d.d581.e7ab.fe74.f01b.78b1.ae75.af57.0ec2.adc7.3245.
12bf.2314.3967.0806.31dc.cb94.d43f.493c.54a6.0421.c3a1.
1c4a.28ac.fc0b.26ca.5870.e576.f7f1.616d.905f.ef41.33bc.
df4d.225e.2d56.7fd6.1395.a3f8.c582
(cut 3 [a 1] b)
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
2014-04-10 00:35:28 +04:00
:: section 2eO, virtualization ::
2013-09-29 00:21:18 +04:00
::
++ mack
|= [sub=* fol=*]
^- (unit)
=+ ton=(mink [sub fol] |=(* ~))
?.(?=([0 *] ton) ~ [~ p.ton])
::
++ mink
~/ %mink
2013-12-16 05:15:04 +04:00
|= [[sub=* fol=*] sky=$+(* (unit))]
2013-09-29 00:21:18 +04:00
=+ tax=*(list ,[@ta *])
|- ^- tone
?@ fol
[%2 tax]
?: ?=(^ -.fol)
=+ hed=$(fol -.fol)
?: ?=(2 -.hed)
hed
=+ tal=$(fol +.fol)
?- -.tal
0 ?-(-.hed 0 [%0 p.hed p.tal], 1 hed)
1 ?-(-.hed 0 tal, 1 [%1 (weld p.hed p.tal)])
2 tal
==
?- fol
::
[0 b=@]
2013-09-29 00:21:18 +04:00
?: =(0 b.fol) [%2 tax]
?: =(1 b.fol) [%0 sub]
?: ?=(@ sub) [%2 tax]
=+ [now=(cap b.fol) lat=(mas b.fol)]
2013-09-29 00:21:18 +04:00
$(b.fol lat, sub ?:(=(2 now) -.sub +.sub))
::
[1 b=*]
[%0 b.fol]
::
[2 b=^ c=*]
2013-09-29 00:21:18 +04:00
=+ ben=$(fol [b.fol c.fol])
?. ?=(0 -.ben) ben
?>(?=(^ p.ben) $(sub -.p.ben, fol +.p.ben))
::
[3 b=*]
2013-09-29 00:21:18 +04:00
=+ ben=$(fol b.fol)
?. ?=(0 -.ben) ben
[%0 .?(p.ben)]
::
[4 b=*]
2013-09-29 00:21:18 +04:00
=+ ben=$(fol b.fol)
?. ?=(0 -.ben) ben
?. ?=(@ p.ben) [%2 tax]
[%0 .+(p.ben)]
::
[5 b=*]
2013-09-29 00:21:18 +04:00
=+ ben=$(fol b.fol)
?. ?=(0 -.ben) ben
?. ?=(^ p.ben) [%2 tax]
[%0 =(-.p.ben +.p.ben)]
::
[6 b=* c=* d=*]
2013-09-29 00:21:18 +04:00
$(fol =>(fol [2 [0 1] 2 [1 c d] [1 0] 2 [1 2 3] [1 0] 4 4 b]))
::
[7 b=* c=*] $(fol =>(fol [2 b 1 c]))
[8 b=* c=*] $(fol =>(fol [7 [[0 1] b] c]))
[9 b=* c=*] $(fol =>(fol [7 c 0 b]))
[10 @ c=*] $(fol c.fol)
[10 [* c=*] d=*]
=+ ben=$(fol c.fol)
?. ?=(0 -.ben) ben
?: ?=(?(%hunk %lose %mean %spot) +<-.fol)
$(fol d.fol, tax [[+<-.fol p.ben] tax])
$(fol d.fol)
2013-09-29 00:21:18 +04:00
::
[11 b=*]
=+ ben=$(fol b.fol)
?. ?=(0 -.ben) ben
=+ val=(sky p.ben)
?@(val [%1 p.ben ~] [%0 +.val])
::
*
[%2 tax]
==
::
++ mock
2013-12-16 05:15:04 +04:00
|= [[sub=* fol=*] sky=$+(* (unit))]
2013-09-29 00:21:18 +04:00
(mook (mink [sub fol] sky))
::
++ mook
|= ton=tone
^- toon
?. ?=([2 *] ton) ton
:- %2
=+ yel=(lent p.ton)
=. p.ton
2013-09-29 00:21:18 +04:00
?. (gth yel 256) p.ton
%+ weld
(scag 128 p.ton)
^- (list ,[@ta *])
:_ (slag (sub yel 128) p.ton)
:- %lose
2013-09-29 00:21:18 +04:00
%+ rap 3
;: weld
"[skipped "
~(rend co %$ %ud (sub yel 256))
" frames]"
==
|- ^- (list tank)
?~ p.ton ~
=+ rex=$(p.ton t.p.ton)
?+ -.i.p.ton rex
%hunk [(tank +.i.p.ton) rex]
%lose [[%leaf (rip 3 (,@ +.i.p.ton))] rex]
%mean :_ rex
2014-01-04 11:28:16 +04:00
?@ +.i.p.ton [%leaf (rip 3 (,@ +.i.p.ton))]
2013-09-29 00:21:18 +04:00
=+ mac=(mack +.i.p.ton +<.i.p.ton)
2014-01-04 11:28:16 +04:00
?~(mac [%leaf "####"] (tank u.mac))
2013-09-29 00:21:18 +04:00
%spot :_ rex
=+ sot=(spot +.i.p.ton)
:- %leaf
;: weld
~(ram re (smyt p.sot))
":<["
~(rend co ~ %ud p.p.q.sot)
" "
~(rend co ~ %ud q.p.q.sot)
"].["
~(rend co ~ %ud p.q.q.sot)
" "
~(rend co ~ %ud q.q.q.sot)
"]>"
==
==
::
++ mang
2013-12-16 05:15:04 +04:00
|= [[gat=* sam=*] sky=$+(* (unit))]
2013-09-29 00:21:18 +04:00
^- (unit)
=+ ton=(mong [[gat sam] sky])
?.(?=([0 *] ton) ~ [~ p.ton])
::
++ mong
2013-12-16 05:15:04 +04:00
|= [[gat=* sam=*] sky=$+(* (unit))]
2013-09-29 00:21:18 +04:00
^- toon
?. &(?=(^ gat) ?=(^ +.gat))
[%2 ~]
(mock [[-.gat [sam +>.gat]] -.gat] sky)
::
++ mung
2013-12-16 05:15:04 +04:00
|= [[gat=* sam=*] sky=$+(* (unit))]
2013-09-29 00:21:18 +04:00
^- tone
?. &(?=(^ gat) ?=(^ +.gat))
[%2 ~]
(mink [[-.gat [sam +>.gat]] -.gat] sky)
2014-03-20 05:05:42 +04:00
::
++ mule :: typed virtual
|* taq=_|.(_*)
=+ mud=(mute taq)
?- -.mud
& [%& p=$:taq]
| [%| p=p.mud]
==
::
++ mute :: untyped virtual
|= taq=_^?(|.(_*))
^- (each ,* (list tank))
=+ ton=(mock [taq 9 2 0 1] |=(* ~))
?- -.ton
%0 [%& p.ton]
%1 [%| (turn p.ton |=(a=* (smyt (path a))))]
%2 [%| p.ton]
==
2013-09-29 00:21:18 +04:00
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
2014-04-10 00:35:28 +04:00
:: section 2eP, diff (move me) ::
2013-09-29 00:21:18 +04:00
::
::
++ berk :: invert diff patch
2013-12-21 06:35:33 +04:00
|* bur=(urge)
2013-12-20 21:34:13 +04:00
|- ^+ bur
2013-09-29 00:21:18 +04:00
?~ bur ~
:_ $(bur t.bur)
?- -.i.bur
& i.bur
| [%| q.i.bur p.i.bur]
==
::
++ diff :: generate patch
|= pum=umph
|= [old=* new=*] ^- udon
:- pum
?+ pum ~|(%unsupported !!)
%a [%d (nude old new)]
:: %b =+ [hel=(cue ((hard ,@) old)) hev=(cue ((hard ,@) new))]
:: [%d (nude hel hev)]
2013-09-29 00:21:18 +04:00
%c =+ [hel=(lore ((hard ,@) old)) hev=(lore ((hard ,@) new))]
[%c (lusk hel hev (loss hel hev))]
==
2013-09-29 00:21:18 +04:00
::
++ loss :: longest subsequence
~/ %loss
2013-12-21 06:35:33 +04:00
|* [hel=(list) hev=(list)]
2013-12-20 21:34:13 +04:00
|- ^+ hev
=+ ^= sev
2013-09-29 00:21:18 +04:00
=+ [inx=0 sev=*(map ,@t (list ,@ud))]
|- ^+ sev
?~ hev sev
=+ guy=(~(get by sev) i.hev)
$(hev t.hev, inx +(inx), sev (~(put by sev) i.hev [inx ?~(guy ~ u.guy)]))
=| gox=[p=@ud q=(map ,@ud ,[p=@ud q=_hev])]
=< abet
=< main
|%
++ abet :: subsequence
^+ hev
?: =(0 p.gox) ~
(flop q:(need (~(get by q.gox) (dec p.gox))))
::
++ hink :: extend fits top
|= [inx=@ud goy=@ud] ^- ?
|(=(p.gox inx) (lth goy p:(need (~(get by q.gox) inx))))
::
++ lonk :: extend fits bottom
|= [inx=@ud goy=@ud] ^- ?
|(=(0 inx) (gth goy p:(need (~(get by q.gox) (dec inx)))))
::
++ lune :: extend
|= [inx=@ud goy=@ud]
^+ +>
%_ +>.$
gox
:- ?:(=(inx p.gox) +(p.gox) p.gox)
%+ ~(put by q.gox) inx
2013-09-29 00:21:18 +04:00
[goy (snag goy hev) ?:(=(0 inx) ~ q:(need (~(get by q.gox) (dec inx))))]
==
::
++ merg :: merge all matches
|= gay=(list ,@ud)
^+ +>
=+ ^= zes
=+ [inx=0 zes=*(list ,[p=@ud q=@ud])]
|- ^+ zes
?: |(?=(~ gay) (gth inx p.gox)) zes
?. (lonk inx i.gay) $(gay t.gay)
?. (hink inx i.gay) $(inx +(inx))
$(inx +(inx), gay t.gay, zes [[inx i.gay] zes])
|- ^+ +>.^$
?~(zes +>.^$ $(zes t.zes, +>.^$ (lune i.zes)))
::
++ main
=+ hol=hel
|- ^+ +>
?~ hol +>
=+ guy=(~(get by sev) i.hol)
$(hol t.hol, +> (merg (flop `(list ,@ud)`?~(guy ~ u.guy))))
--
::
++ locz :: trivial algorithm
|= [hel=tape hev=tape]
^- tape
=+ [leh=(lent hel) veh=(lent hev)]
=- (flop q.yun)
^= yun
|- ^- [p=@ud q=tape]
~+
?: |(=(0 leh) =(0 veh)) [0 ~]
=+ [dis=(snag (dec leh) hel) dat=(snag (dec veh) hev)]
?: =(dis dat)
=+ say=$(leh (dec leh), veh (dec veh))
[+(p.say) [dis q.say]]
=+ [lef=$(leh (dec leh)) rig=$(veh (dec veh))]
?:((gth p.lef p.rig) lef rig)
::
++ lore :: atom to line list
~/ %lore
|= lub=@
=| tez=(list ,@t)
|- ^+ tez
?: =(0 lub) (flop tez)
=+ ^= meg
=+ meg=0
|- ^- @ud
=+ gam=(cut 3 [meg 1] lub)
?:(|(=(10 gam) =(0 gam)) meg $(meg +(meg)))
$(lub (rsh 3 +(meg) lub), tez [(end 3 meg lub) tez])
::
++ role :: line list to atom
|= tez=(list ,@t)
(rap 3 (turn tez |=(a=@t (cat 3 a 10))))
::
++ lump :: apply patch
|= [don=udon src=*]
^- *
?+ p.don ~|(%unsupported !!)
%a
?+ -.q.don ~|(%unsupported !!)
%a q.p.q.don
%c (lurk ((hard (list)) src) p.q.don)
2014-04-16 05:25:40 +04:00
%d (lure src p.q.don)
2013-09-29 00:21:18 +04:00
==
::
%c
=+ dst=(lore ((hard ,@) src))
%- role
?+ -.q.don ~|(%unsupported !!)
%a ((hard (list ,@t)) q.p.q.don)
%c (lurk dst p.q.don)
==
==
::
2014-04-16 05:25:40 +04:00
++ lure :: apply tree diff
|= [a=* b=upas]
^- *
?^ -.b
[$(b -.b) $(b +.b)]
?+ -.b ~|(%unsupported !!)
%0 .*(a [0 p.b])
%1 .*(a [1 p.b])
==
2013-09-29 00:21:18 +04:00
++ limp :: invert patch
|= don=udon ^- udon
:- p.don
?+ -.q.don ~|(%unsupported !!)
%a [%a q.p.q.don p.p.q.don]
%c [%c (berk p.q.don)]
%d [%d q.q.don p.q.don]
2013-09-29 00:21:18 +04:00
==
::
++ hump :: general prepatch
|= [pum=umph src=*] ^- *
?+ pum ~|(%unsupported !!)
%a src
%c (lore ((hard ,@) src))
==
::
++ husk :: unprepatch
|= [pum=umph dst=*] ^- *
?+ pum ~|(%unsupported !!)
%a dst
%c (role ((hard (list ,@)) dst))
==
::
++ lurk :: apply list patch
2013-12-21 06:35:33 +04:00
|* [hel=(list) rug=(urge)]
2013-09-29 00:21:18 +04:00
^+ hel
=+ war=`_hel`~
|- ^+ hel
?~ rug (flop war)
?- -.i.rug
&
2013-09-29 00:21:18 +04:00
%= $
rug t.rug
hel (slag p.i.rug hel)
war (weld (flop (scag p.i.rug hel)) war)
==
::
|
%= $
rug t.rug
hel =+ gur=(flop p.i.rug)
|- ^+ hel
?~ gur hel
?>(&(?=(^ hel) =(i.gur i.hel)) $(hel t.hel, gur t.gur))
war (weld q.i.rug war)
==
==
::
++ lusk :: lcs to list patch
2013-12-21 06:35:33 +04:00
|* [hel=(list) hev=(list) lcs=(list)]
2013-09-29 00:21:18 +04:00
=+ ^= rag
^- $% [& p=@ud]
[| p=_lcs q=_lcs]
==
[%& 0]
2013-12-16 05:15:04 +04:00
=> .(rag [p=rag q=*(list ,_rag)])
2013-09-29 00:21:18 +04:00
=< abet =< main
|%
++ abet =.(q.rag ?:(=([& 0] p.rag) q.rag [p.rag q.rag]) (flop q.rag))
++ done
|= new=_p.rag
^+ rag
?- -.p.rag
| ?- -.new
| [[%| (weld p.new p.p.rag) (weld q.new q.p.rag)] q.rag]
& [new [p.rag q.rag]]
==
& ?- -.new
| [new ?:(=(0 p.p.rag) q.rag [p.rag q.rag])]
& [[%& (add p.p.rag p.new)] q.rag]
==
==
::
++ main
|- ^+ +
?~ hel
?~ hev
?>(?=(~ lcs) +)
$(hev t.hev, rag (done %| ~ [i.hev ~]))
?~ hev
$(hel t.hel, rag (done %| [i.hel ~] ~))
?~ lcs
+(rag (done %| (flop hel) (flop hev)))
?: =(i.hel i.lcs)
?: =(i.hev i.lcs)
$(lcs t.lcs, hel t.hel, hev t.hev, rag (done %& 1))
$(hev t.hev, rag (done %| ~ [i.hev ~]))
?: =(i.hev i.lcs)
$(hel t.hel, rag (done %| [i.hel ~] ~))
$(hel t.hel, hev t.hev, rag (done %| [i.hel ~] [i.hev ~]))
--
2014-04-16 03:47:57 +04:00
++ nude :: tree change
|= [a=* b=*]
^- [p=upas q=upas]
=< [p=(tred a b) q=(tred b a)]
|%
++ axes :: locs of nouns
|= [a=@ b=*] ^- (map ,* axis)
=+ c=*(map ,* axis)
|- ^- (map ,* axis)
=> .(c (~(put by c) b a))
?@ b
c
%- ~(uni by c)
%- ~(uni by $(a (mul 2 a), b -.b))
$(a +((mul 2 a)), b +.b)
++ tred :: diff a->b
|= [a=* b=*] ^- upas
=| c=(unit ,*)
=+ d=(axes 1 a)
|- ^- upas
=> .(c (~(get by d) b))
?~ c
?@ b
[%1 b]
=+ e=^-(upas [$(b -.b) $(b +.b)])
?- e
[[%1 *] [%1 *]] [%1 [p.p.e p.q.e]]
* e
==
[%0 u.c]
--
2013-09-29 00:21:18 +04:00
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eW, lite number theory ::
::
++ egcd :: schneier's egcd
|= [a=@ b=@]
=+ si
=+ [c=(sun a) d=(sun b)]
=+ [u=[c=(sun 1) d=--0] v=[c=--0 d=(sun 1)]]
|- ^- [d=@ u=@ v=@]
?: =(--0 c)
[(abs d) d.u d.v]
:: ?> ?& =(c (sum (pro (sun a) c.u) (pro (sun b) c.v)))
:: =(d (sum (pro (sun a) d.u) (pro (sun b) d.v)))
:: ==
=+ q=(fra d c)
%= $
c (dif d (pro q c))
d c
u [(dif d.u (pro q c.u)) c.u]
v [(dif d.v (pro q c.v)) c.v]
==
::
++ pram :: rabin-miller
|= a=@ ^- ?
?: ?| =(0 (end 0 1 a))
=(1 a)
=+ b=1
|- ^- ?
?: =(512 b)
|
?|(=+(c=+((mul 2 b)) &(!=(a c) =(a (mul c (div a c))))) $(b +(b)))
==
|
=+ ^= b
=+ [s=(dec a) t=0]
|- ^- [s=@ t=@]
?: =(0 (end 0 1 s))
$(s (rsh 0 1 s), t +(t))
[s t]
?> =((mul s.b (bex t.b)) (dec a))
=+ c=0
|- ^- ?
?: =(c 64)
&
=+ d=(~(raw og (add c a)) (met 0 a))
=+ e=(~(exp fo a) s.b d)
?& ?| =(1 e)
=+ f=0
|- ^- ?
?: =(e (dec a))
&
?: =(f (dec t.b))
|
$(e (~(pro fo a) e e), f +(f))
==
$(c +(c))
==
::
++ ramp :: make r-m prime
|= [a=@ b=(list ,@) c=@] ^- @ux :: [bits snags seed]
=> .(c (shas %ramp c))
=+ d=_@
|-
?: =((mul 100 a) d)
~|(%ar-ramp !!)
=+ e=(~(raw og c) a)
?: &(|-(?~(b & &(!=(1 (mod e i.b)) $(b +.b)))) (pram e))
e
$(c +(c), d (shax d))
::
++ fo :: modulo prime
|_ a=@
++ dif
|= [b=@ c=@]
(sit (sub (add a b) (sit c)))
::
++ exp
|= [b=@ c=@]
?: =(0 b)
1
=+ d=$(b (rsh 0 1 b))
=+ e=(pro d d)
?:(=(0 (end 0 1 b)) e (pro c e))
::
++ fra
|= [b=@ c=@]
(pro b (inv c))
::
++ inv
|= b=@
=+ c=(dul:si u:(egcd b a) a)
c
::
++ pro
|= [b=@ c=@]
(sit (mul b c))
::
++ sit
|= b=@
(mod b a)
::
++ sum
|= [b=@ c=@]
(sit (add b c))
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
2014-04-11 05:05:59 +04:00
:: section 2eX, ed25519 signatures ::
::
++ ed :: ed25519
=>
=+ =+ [b=256 q=(sub (bex 255) 19)]
=+ fq=~(. fo q)
=+ ^= l
%+ add
(bex 252)
27.742.317.777.372.353.535.851.937.790.883.648.493
=+ d=(dif.fq 0 (fra.fq 121.665 121.666))
=+ ii=(exp.fq (div (dec q) 4) 2)
[b=b q=q fq=fq l=l d=d ii=ii]
~% %coed +> ~
|%
++ norm |=(x=@ ?:(=(0 (mod x 2)) x (sub q x)))
::
++ xrec :: recover x-coord
|= y=@ ^- @
=+ ^= xx
%+ mul (dif.fq (mul y y) 1)
(inv.fq +(:(mul d y y)))
=+ x=(exp.fq (div (add 3 q) 8) xx)
?: !=(0 (dif.fq (mul x x) (sit.fq xx)))
(norm (pro.fq x ii))
(norm x)
::
++ ward :: edwards multiply
|= [pp=[@ @] qq=[@ @]] ^- [@ @]
=+ dp=:(pro.fq d -.pp -.qq +.pp +.qq)
=+ ^= xt
%+ pro.fq
%+ sum.fq
(pro.fq -.pp +.qq)
(pro.fq -.qq +.pp)
(inv.fq (sum.fq 1 dp))
=+ ^= yt
%+ pro.fq
%+ sum.fq
(pro.fq +.pp +.qq)
(pro.fq -.pp -.qq)
(inv.fq (dif.fq 1 dp))
[xt yt]
::
++ scam :: scalar multiply
|= [pp=[@ @] e=@] ^- [@ @]
?: =(0 e)
[0 1]
=+ qq=$(e (div e 2))
=> .(qq (ward qq qq))
?: =(1 (dis 1 e))
(ward qq pp)
qq
::
++ etch :: encode point
|= pp=[@ @] ^- @
(can 0 ~[[(sub b 1) +.pp] [1 (dis 1 -.pp)]])
::
++ curv :: point on curve?
|= [x=@ y=@] ^- ?
.= 0
%+ dif.fq
%+ sum.fq
(pro.fq (sub q (sit.fq x)) x)
(pro.fq y y)
(sum.fq 1 :(pro.fq d x x y y))
::
++ deco :: decode point
|= s=@ ^- (unit ,[@ @])
=+ y=(cut 0 [0 (dec b)] s)
=+ si=(cut 0 [(dec b) 1] s)
=+ x=(xrec y)
=> .(x ?:(!=(si (dis 1 x)) (sub q x) x))
=+ pp=[x y]
?. (curv pp)
~
[~ pp]
::
++ bb
=+ bby=(pro.fq 4 (inv.fq 5))
[(xrec bby) bby]
::
--
~% %ed + ~
2014-04-11 05:05:59 +04:00
|%
++ puck :: public key
~/ %puck
2014-04-11 05:05:59 +04:00
|= sk=@ ^- @
=+ h=(shal (rsh 0 3 b) sk)
=+ ^= a
%+ add
(bex (sub b 2))
(lsh 0 3 (cut 0 [3 (sub b 5)] h))
=+ aa=(scam bb a)
(etch aa)
::
++ sign :: certify
~/ %sign
2014-04-11 05:05:59 +04:00
|= [m=@ sk=@ pk=@] ^- @
=+ h=(shal (rsh 0 3 b) sk)
=+ ^= a
%+ add
(bex (sub b 2))
(lsh 0 3 (cut 0 [3 (sub b 5)] h))
=+ ^= r
=+ hm=(cut 0 [b b] h)
=+ ^= i
%+ can 0
:~ [b hm]
[(met 0 m) m]
==
(shaz i)
=+ rr=(scam bb r)
=+ ^= ss
=+ er=(etch rr)
=+ ^= ha
%+ can 0
:~ [b er]
[b pk]
[(met 0 m) m]
==
(~(sit fo l) (add r (mul (shaz ha) a)))
(can 0 ~[[b (etch rr)] [b ss]])
::
++ veri :: validate
2014-04-13 06:59:02 +04:00
~/ %veri
2014-04-11 05:05:59 +04:00
|= [s=@ m=@ pk=@] ^- ?
?: (gth (div b 4) (met 3 s)) |
?: (gth (div b 8) (met 3 pk)) |
=+ rr=(deco (cut 0 [0 b] s))
?~ rr |
=+ aa=(deco pk)
?~ aa |
=+ ss=(cut 0 [b b] s)
=+ ha=(can 0 ~[[b (etch u.rr)] [b pk] [(met 0 m) m]])
=+ h=(shaz ha)
=((scam bb ss) (ward u.rr (scam u.aa h)))
::
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
2013-09-29 00:21:18 +04:00
:: section 2eY, SHA-256 (move me) ::
::
++ shad |=(ruz=@ (shax (shax ruz))) :: double sha-256
++ shaf :: half sha-256
|= [sal=@ ruz=@]
=+ haz=(shas sal ruz)
(mix (end 7 1 haz) (rsh 7 1 haz))
::
++ shak :: XX shd be PBKDF
|= [who=@p wud=@]
(shas (mix %shak who) wud)
::
++ sham :: noun hash
|= yux=* ^- @uvH ^- @
?@ yux
(shaf %mash yux)
(shaf %sham (jam yux))
::
++ shas :: salted hash
|= [sal=@ ruz=@]
2013-09-29 00:21:18 +04:00
(shax (mix sal (shax ruz)))
::
++ shax :: sha-256
~/ %shax
|= ruz=@ ^- @
~| %sha
=+ [few==>(fe .(a 5)) wac=|=([a=@ b=@] (cut 5 [a 1] b))]
=+ [sum=sum.few ror=ror.few net=net.few inv=inv.few]
=+ ral=(lsh 0 3 (met 3 ruz))
=+ ^= ful
%+ can 0
:~ [ral ruz]
[8 128]
[(mod (sub 960 (mod (add 8 ral) 512)) 512) 0]
[64 (~(net fe 6) ral)]
==
=+ lex=(met 9 ful)
=+ ^= kbx 0xc671.78f2.bef9.a3f7.a450.6ceb.90be.fffa.
8cc7.0208.84c8.7814.78a5.636f.748f.82ee.
682e.6ff3.5b9c.ca4f.4ed8.aa4a.391c.0cb3.
34b0.bcb5.2748.774c.1e37.6c08.19a4.c116.
106a.a070.f40e.3585.d699.0624.d192.e819.
c76c.51a3.c24b.8b70.a81a.664b.a2bf.e8a1.
9272.2c85.81c2.c92e.766a.0abb.650a.7354.
5338.0d13.4d2c.6dfc.2e1b.2138.27b7.0a85.
1429.2967.06ca.6351.d5a7.9147.c6e0.0bf3.
bf59.7fc7.b003.27c8.a831.c66d.983e.5152.
76f9.88da.5cb0.a9dc.4a74.84aa.2de9.2c6f.
240c.a1cc.0fc1.9dc6.efbe.4786.e49b.69c1.
c19b.f174.9bdc.06a7.80de.b1fe.72be.5d74.
550c.7dc3.2431.85be.1283.5b01.d807.aa98.
ab1c.5ed5.923f.82a4.59f1.11f1.3956.c25b.
e9b5.dba5.b5c0.fbcf.7137.4491.428a.2f98
=+ ^= hax 0x5be0.cd19.1f83.d9ab.9b05.688c.510e.527f.
a54f.f53a.3c6e.f372.bb67.ae85.6a09.e667
=+ i=0
|- ^- @
?: =(i lex)
(rep 5 (turn (rip 5 hax) net))
=+ ^= wox
=+ dux=(cut 9 [i 1] ful)
=+ wox=(rep 5 (turn (rip 5 dux) net))
=+ j=16
|- ^- @
?: =(64 j)
wox
2013-09-29 00:21:18 +04:00
=+ :* l=(wac (sub j 15) wox)
m=(wac (sub j 2) wox)
n=(wac (sub j 16) wox)
o=(wac (sub j 7) wox)
==
2014-01-25 02:08:37 +04:00
=+ x=:(mix (ror 0 7 l) (ror 0 18 l) (rsh 0 3 l))
=+ y=:(mix (ror 0 17 m) (ror 0 19 m) (rsh 0 10 m))
2013-09-29 00:21:18 +04:00
=+ z=:(sum n x o y)
$(wox (con (lsh 5 j z) wox), j +(j))
=+ j=0
=+ :* a=(wac 0 hax)
b=(wac 1 hax)
c=(wac 2 hax)
d=(wac 3 hax)
e=(wac 4 hax)
f=(wac 5 hax)
g=(wac 6 hax)
h=(wac 7 hax)
==
|- ^- @
?: =(64 j)
%= ^$
i +(i)
hax %+ rep 5
:~ (sum a (wac 0 hax))
(sum b (wac 1 hax))
(sum c (wac 2 hax))
(sum d (wac 3 hax))
(sum e (wac 4 hax))
(sum f (wac 5 hax))
(sum g (wac 6 hax))
(sum h (wac 7 hax))
==
==
2014-01-25 02:08:37 +04:00
=+ l=:(mix (ror 0 2 a) (ror 0 13 a) (ror 0 22 a)) :: s0
2013-09-29 00:21:18 +04:00
=+ m=:(mix (dis a b) (dis a c) (dis b c)) :: maj
=+ n=(sum l m) :: t2
2014-01-25 02:08:37 +04:00
=+ o=:(mix (ror 0 6 e) (ror 0 11 e) (ror 0 25 e)) :: s1
2013-09-29 00:21:18 +04:00
=+ p=(mix (dis e f) (dis (inv e) g)) :: ch
=+ q=:(sum h o p (wac j kbx) (wac j wox)) :: t1
$(j +(j), a (sum q n), b a, c b, d c, e (sum d q), f e, g f, h g)
::
++ shaw :: hash to nbits
|= [sal=@ len=@ ruz=@]
(~(raw og (shas sal (mix len ruz))) len)
::
++ og :: shax-powered rng
~/ %og
|_ a=@
++ rad :: random in range
|= b=@ ^- @
=+ c=(raw (met 0 b))
2013-09-29 00:21:18 +04:00
?:((lth c b) c $(a +(a)))
::
++ raw :: random bits
~/ %raw
|= b=@ ^- @
%+ can
0
=+ c=(shas %og-a (mix b a))
|- ^- (list ,[@ @])
?: =(0 b)
~
=+ d=(shas %og-b (mix b (mix a c)))
?: (lth b 256)
[[b (end 0 b d)] ~]
[[256 d] $(c d, b (sub b 256))]
--
2014-01-21 06:07:11 +04:00
++ shaz :: sha-512
|= ruz=@ ^- @
(shal [(met 3 ruz) ruz])
++ shal :: sha-512 with length
~/ %shal
|= [len=@ ruz=@] ^- @
2014-01-22 03:37:46 +04:00
=> .(ruz (cut 3 [0 len] ruz))
2014-01-21 06:07:11 +04:00
=+ [few==>(fe .(a 6)) wac=|=([a=@ b=@] (cut 6 [a 1] b))]
=+ [sum=sum.few ror=ror.few net=net.few inv=inv.few]
=+ ral=(lsh 0 3 len)
2014-01-21 06:07:11 +04:00
=+ ^= ful
%+ can 0
:~ [ral ruz]
[8 128]
[(mod (sub 1.920 (mod (add 8 ral) 1.024)) 1.024) 0]
[128 (~(net fe 7) ral)]
==
=+ lex=(met 10 ful)
=+ ^= kbx 0x6c44.198c.4a47.5817.5fcb.6fab.3ad6.faec.
597f.299c.fc65.7e2a.4cc5.d4be.cb3e.42b6.
431d.67c4.9c10.0d4c.3c9e.be0a.15c9.bebc.
32ca.ab7b.40c7.2493.28db.77f5.2304.7d84.
1b71.0b35.131c.471b.113f.9804.bef9.0dae.
0a63.7dc5.a2c8.98a6.06f0.67aa.7217.6fba.
f57d.4f7f.ee6e.d178.eada.7dd6.cde0.eb1e.
d186.b8c7.21c0.c207.ca27.3ece.ea26.619c.
c671.78f2.e372.532b.bef9.a3f7.b2c6.7915.
a450.6ceb.de82.bde9.90be.fffa.2363.1e28.
8cc7.0208.1a64.39ec.84c8.7814.a1f0.ab72.
78a5.636f.4317.2f60.748f.82ee.5def.b2fc.
682e.6ff3.d6b2.b8a3.5b9c.ca4f.7763.e373.
4ed8.aa4a.e341.8acb.391c.0cb3.c5c9.5a63.
34b0.bcb5.e19b.48a8.2748.774c.df8e.eb99.
1e37.6c08.5141.ab53.19a4.c116.b8d2.d0c8.
106a.a070.32bb.d1b8.f40e.3585.5771.202a.
d699.0624.5565.a910.d192.e819.d6ef.5218.
c76c.51a3.0654.be30.c24b.8b70.d0f8.9791.
a81a.664b.bc42.3001.a2bf.e8a1.4cf1.0364.
9272.2c85.1482.353b.81c2.c92e.47ed.aee6.
766a.0abb.3c77.b2a8.650a.7354.8baf.63de.
5338.0d13.9d95.b3df.4d2c.6dfc.5ac4.2aed.
2e1b.2138.5c26.c926.27b7.0a85.46d2.2ffc.
1429.2967.0a0e.6e70.06ca.6351.e003.826f.
d5a7.9147.930a.a725.c6e0.0bf3.3da8.8fc2.
bf59.7fc7.beef.0ee4.b003.27c8.98fb.213f.
a831.c66d.2db4.3210.983e.5152.ee66.dfab.
76f9.88da.8311.53b5.5cb0.a9dc.bd41.fbd4.
4a74.84aa.6ea6.e483.2de9.2c6f.592b.0275.
240c.a1cc.77ac.9c65.0fc1.9dc6.8b8c.d5b5.
efbe.4786.384f.25e3.e49b.69c1.9ef1.4ad2.
c19b.f174.cf69.2694.9bdc.06a7.25c7.1235.
80de.b1fe.3b16.96b1.72be.5d74.f27b.896f.
550c.7dc3.d5ff.b4e2.2431.85be.4ee4.b28c.
1283.5b01.4570.6fbe.d807.aa98.a303.0242.
ab1c.5ed5.da6d.8118.923f.82a4.af19.4f9b.
59f1.11f1.b605.d019.3956.c25b.f348.b538.
e9b5.dba5.8189.dbbc.b5c0.fbcf.ec4d.3b2f.
7137.4491.23ef.65cd.428a.2f98.d728.ae22
=+ ^= hax 0x5be0.cd19.137e.2179.1f83.d9ab.fb41.bd6b.
9b05.688c.2b3e.6c1f.510e.527f.ade6.82d1.
a54f.f53a.5f1d.36f1.3c6e.f372.fe94.f82b.
bb67.ae85.84ca.a73b.6a09.e667.f3bc.c908
=+ i=0
|- ^- @
?: =(i lex)
(rep 6 (turn (rip 6 hax) net))
=+ ^= wox
=+ dux=(cut 10 [i 1] ful)
=+ wox=(rep 6 (turn (rip 6 dux) net))
=+ j=16
|- ^- @
?: =(80 j)
wox
=+ :* l=(wac (sub j 15) wox)
m=(wac (sub j 2) wox)
n=(wac (sub j 16) wox)
o=(wac (sub j 7) wox)
==
2014-01-25 02:08:37 +04:00
=+ x=:(mix (ror 0 1 l) (ror 0 8 l) (rsh 0 7 l))
=+ y=:(mix (ror 0 19 m) (ror 0 61 m) (rsh 0 6 m))
2014-01-21 06:07:11 +04:00
=+ z=:(sum n x o y)
$(wox (con (lsh 6 j z) wox), j +(j))
=+ j=0
=+ :* a=(wac 0 hax)
b=(wac 1 hax)
c=(wac 2 hax)
d=(wac 3 hax)
e=(wac 4 hax)
f=(wac 5 hax)
g=(wac 6 hax)
h=(wac 7 hax)
==
|- ^- @
?: =(80 j)
%= ^$
i +(i)
hax %+ rep 6
:~ (sum a (wac 0 hax))
(sum b (wac 1 hax))
(sum c (wac 2 hax))
(sum d (wac 3 hax))
(sum e (wac 4 hax))
(sum f (wac 5 hax))
(sum g (wac 6 hax))
(sum h (wac 7 hax))
==
==
2014-01-25 02:08:37 +04:00
=+ l=:(mix (ror 0 28 a) (ror 0 34 a) (ror 0 39 a)) :: S0
2014-01-21 06:07:11 +04:00
=+ m=:(mix (dis a b) (dis a c) (dis b c)) :: maj
=+ n=(sum l m) :: t2
2014-01-25 02:08:37 +04:00
=+ o=:(mix (ror 0 14 e) (ror 0 18 e) (ror 0 41 e)) :: S1
2014-01-21 06:07:11 +04:00
=+ p=(mix (dis e f) (dis (inv e) g)) :: ch
=+ q=:(sum h o p (wac j kbx) (wac j wox)) :: t1
$(j +(j), a (sum q n), b a, c b, d c, e (sum d q), f e, g f, h g)
2013-09-29 00:21:18 +04:00
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2eZ, OLD rendering (kill me) ::
::
++ show :: XX deprecated, use type
|= vem=*
|^ ^- tank
?: ?=(@ vem)
[%leaf (mesc (trip vem))]
?- vem
[s=~ c=*]
2013-09-29 00:21:18 +04:00
[%leaf '\'' (weld (mesc (tape +.vem)) `tape`['\'' ~])]
::
[s=%a c=@] [%leaf (mesc (trip c.vem))]
[s=%b c=*] (shop c.vem |=(a=@ ~(rub at a)))
[s=[%c p=@] c=*]
:+ %palm
[['.' ~] ['-' ~] ~ ~]
[[%leaf (mesc (trip p.s.vem))] $(vem c.vem) ~]
::
[s=%d c=*] (shop c.vem |=(a=@ ~(rud at a)))
[s=%k c=*] (tank c.vem)
[s=%h c=*]
?: =(0 c.vem) :: XX remove after 220
[%leaf '#' ~]
:+ %rose
[['/' ~] ['/' ~] ~]
2014-02-10 21:50:20 +04:00
=+ yol=((list ,@ta) c.vem)
2013-09-29 00:21:18 +04:00
(turn yol |=(a=@ta [%leaf (trip a)]))
::
[s=%o c=*]
2013-09-29 00:21:18 +04:00
%= $
vem
:- [%m '%h:<[%d %d].[%d %d]>']
2013-09-29 00:21:18 +04:00
[-.c.vem +<-.c.vem +<+.c.vem +>-.c.vem +>+.c.vem ~]
==
::
[s=%p c=*] (shop c.vem |=(a=@ ~(rup at a)))
[s=%q c=*] (shop c.vem |=(a=@ ~(r at a)))
[s=%r c=*] $(vem [[%r ' ' '{' '}'] c.vem])
[s=%t c=*] (shop c.vem |=(a=@ ~(rt at a)))
[s=%v c=*] (shop c.vem |=(a=@ ~(ruv at a)))
[s=%x c=*] (shop c.vem |=(a=@ ~(rux at a)))
[s=[%m p=@] c=*] (shep p.s.vem c.vem)
[s=[%r p=@] c=*]
$(vem [[%r ' ' (cut 3 [0 1] p.s.vem) (cut 3 [1 1] p.s.vem)] c.vem])
::
[s=[%r p=@ q=@ r=@] c=*]
:+ %rose
:* p=(mesc (trip p.s.vem))
q=(mesc (trip q.s.vem))
r=(mesc (trip r.s.vem))
==
|- ^- (list tank)
?@ c.vem
~
[^$(vem -.c.vem) $(c.vem +.c.vem)]
::
[s=%z c=*] $(vem [[%r %$ %$ %$] c.vem])
* !!
==
++ shep
|= [fom=@ gar=*]
^- tank
=+ l=(met 3 fom)
=+ i=0
:- %leaf
|- ^- tape
?: (gte i l)
~
=+ c=(cut 3 [i 1] fom)
?. =(37 c)
(weld (mesc [c ~]) $(i +(i)))
=+ d=(cut 3 [+(i) 1] fom)
?. .?(gar)
['\\' '#' $(i (add 2 i))]
(weld ~(ram re (show d -.gar)) $(i (add 2 i), gar +.gar))
::
++ shop
2013-12-16 05:15:04 +04:00
|= [aug=* vel=$+(a=@ tape)]
2013-09-29 00:21:18 +04:00
^- tank
?: ?=(@ aug)
[%leaf (vel aug)]
:+ %rose
2013-09-29 00:21:18 +04:00
[[' ' ~] ['[' ~] [']' ~]]
=> .(aug `*`aug)
|- ^- (list tank)
?: ?=(@ aug)
[^$ ~]
[^$(aug -.aug) $(aug +.aug)]
--
++ at
|_ a=@
++ r
?: ?& (gte (met 3 a) 2)
|-
?: =(0 a)
&
=+ vis=(end 3 1 a)
?& ?|(=('-' vis) ?&((gte vis 'a') (lte vis 'z')))
2013-09-29 00:21:18 +04:00
$(a (rsh 3 1 a))
==
==
rtam
?: (lte (met 3 a) 2)
rud
rux
::
++ rf `tape`[?-(a & '&', | '|', * !!) ~]
++ rn `tape`[?>(=(0 a) '~') ~]
++ rt `tape`['\'' (weld (mesc (trip a)) `tape`['\'' ~])]
++ rta rt
++ rtam `tape`['%' (trip a)]
++ rub `tape`['0' 'b' (rum 2 ~ |=(b=@ (add '0' b)))]
++ rud (rum 10 ~ |=(b=@ (add '0' b)))
++ rum
2013-12-16 05:15:04 +04:00
|= [b=@ c=tape d=$+(@ @)]
2013-09-29 00:21:18 +04:00
^- tape
?: =(0 a)
[(d 0) c]
=+ e=0
|- ^- tape
?: =(0 a)
2013-09-29 00:21:18 +04:00
c
=+ f=&(!=(0 e) =(0 (mod e ?:(=(10 b) 3 4))))
%= $
a (div a b)
c [(d (mod a b)) ?:(f [?:(=(10 b) ',' '-') c] c)]
e +(e)
==
::
++ rup
=+ b=(met 3 a)
^- tape
:- '-'
|- ^- tape
?: (gth (met 5 a) 1)
%+ weld
$(a (rsh 5 1 a), b (sub b 4))
2013-09-29 00:21:18 +04:00
`tape`['-' '-' $(a (end 5 1 a), b 4)]
?: =(0 b)
['~' ~]
?: (lte b 1)
(trip (tos:po a))
|- ^- tape
?: =(2 b)
=+ c=(rsh 3 1 a)
=+ d=(end 3 1 a)
(weld (trip (tod:po c)) (trip (tos:po (mix c d))))
=+ c=(rsh 3 2 a)
=+ d=(end 3 2 a)
(weld ^$(a c, b (met 3 c)) `tape`['-' $(a (mix c d), b 2)])
::
++ ruv
^- tape
:+ '0'
'v'
%^ rum
64
~
|= b=@
?: =(63 b)
'+'
?: =(62 b)
2013-09-29 00:21:18 +04:00
'-'
?:((lth b 26) (add 65 b) ?:((lth b 52) (add 71 b) (sub b 4)))
::
++ rux `tape`['0' 'x' (rum 16 ~ |=(b=@ (add b ?:((lth b 10) 48 87))))]
--
:::::::::::::::::::::::::::::::::::::::::::::::::::::: ::
:::: chapter 2f, Hoon proper ::::
:: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2fA, miscellaneous funs ::
:: ::
2013-12-23 03:32:30 +04:00
++ bull
|= [bid=twin der=type]
^- type
2014-01-02 00:47:18 +04:00
?:(|(=(%void der) =(%void s.bid)) %void [%bull bid der])
2013-12-23 03:32:30 +04:00
::
2014-01-05 06:05:33 +04:00
++ cain |=(vax=vase (sell vax))
2013-09-29 00:21:18 +04:00
++ cell
~/ %cell
|= [hed=type tal=type]
^- type
?:(=(%void hed) %void ?:(=(%void tal) %void [%cell hed tal]))
::
++ core
~/ %core
2013-09-29 00:21:18 +04:00
|= [pac=type con=coil]
^- type
?:(=(%void pac) %void [%core pac con])
::
++ cube
~/ %cube
|= [dil=* goq=type]
^- type
?: =(%void goq)
%void
[%cube dil goq]
::
++ face
~/ %face
|= [cog=term der=type]
2013-09-29 00:21:18 +04:00
^- type
?: =(%void der)
%void
[%face cog der]
::
++ bean ^-(type [%fork [%cube 0 %atom %f] [%cube 1 %atom %f]])
++ flay
~/ %flay
|= pok=port
^- [p=axis q=type]
:- p.pok
?- -.q.pok
& p.q.pok
| (roll q.q.pok =+([p=[p=*type q=*foot] q=`type`%void] |.((fork p.p q))))
==
::
2013-12-31 23:30:37 +04:00
++ flee
|= poy=post
^- port
?- -.q.poy
0 [p.poy %& p.q.poy]
1 [p.poy %| p.q.poy q.q.poy]
2014-01-02 00:47:18 +04:00
2 [(peg p.poy r.p.q.poy) %& s.p.q.poy]
2013-12-31 23:30:37 +04:00
==
::
2013-09-29 00:21:18 +04:00
++ foil
~/ %foil
|= pok=port
^- prop
?- -.q.pok
& [p.pok [~ [[p.q.pok [%elm ~ 1]] ~]]]
| [p.pok [p.q.pok q.q.pok]]
==
::
2013-09-29 00:21:18 +04:00
++ fork
~/ %fork
|= [hoz=type bur=type]
^- type
?: =(hoz bur)
hoz
?: =(%void hoz)
bur
?: =(%void bur)
hoz
[%fork hoz bur]
::
++ cove
|= nug=nock
2013-09-29 00:21:18 +04:00
?- nug
[0 *] p.nug
[10 *] $(nug q.nug)
* ~|([%cove nug] !!)
==
++ comb
~/ %comb
|= [mal=nock buz=nock]
^- nock
2013-09-29 00:21:18 +04:00
?: ?&(?=([0 *] mal) !=(0 p.mal))
?: ?&(?=([0 *] buz) !=(0 p.buz))
2013-09-29 00:21:18 +04:00
[%0 (peg p.mal p.buz)]
?: ?=([2 [0 *] [0 *]] buz)
[%2 [%0 (peg p.mal p.p.buz)] [%0 (peg p.mal p.q.buz)]]
[%7 mal buz]
?: ?=([^ [0 1]] mal)
[%8 p.mal buz]
?: =([0 1] buz)
mal
[%7 mal buz]
::
++ cond
~/ %cond
|= [pex=nock yom=nock woq=nock]
^- nock
2013-09-29 00:21:18 +04:00
?- pex
[1 0] yom
[1 1] woq
* [%6 pex yom woq]
==
::
++ cons
~/ %cons
|= [vur=nock sed=nock]
^- nock
2013-09-29 00:21:18 +04:00
?: ?=([[0 *] [0 *]] +<)
?: ?&(=(+(p.vur) p.sed) =((div p.vur 2) (div p.sed 2)))
[%0 (div p.vur 2)]
[vur sed]
?: ?=([[1 *] [1 *]] +<)
[%1 p.vur p.sed]
[vur sed]
2013-09-29 00:21:18 +04:00
::
++ fitz
~/ %fitz
|= [yaz=term wix=term]
=+ ^= fiz
|= mot=@ta ^- [p=@ q=@ta]
=+ len=(met 3 mot)
?: =(0 len)
[0 %$]
=+ tyl=(rsh 3 (dec len) mot)
?: &((gte tyl 'A') (lte tyl 'Z'))
[(sub tyl 64) (end 3 (dec len) mot)]
[0 mot]
=+ [yoz=(fiz yaz) wux=(fiz wix)]
?& ?| =(0 p.yoz)
=(0 p.wux)
&(!=(0 p.wux) (lte p.wux p.yoz))
==
|- ?| =(%$ p.yoz)
2013-09-29 00:21:18 +04:00
=(%$ p.wux)
?& =((end 3 1 p.yoz) (end 3 1 p.wux))
$(p.yoz (rsh 3 1 p.yoz), p.wux (rsh 3 1 p.wux))
==
==
==
::
++ flan
~/ %flan
|= [bos=nock nif=nock]
^- nock
2013-09-29 00:21:18 +04:00
?- bos
[1 1] bos
[1 0] nif
*
?- nif
[1 1] nif
[1 0] bos
* [%6 bos nif [%1 1]]
==
==
::
++ flip
~/ %flip
|= [dyr=nock]
2013-09-29 00:21:18 +04:00
[%6 dyr [%1 1] [%1 0]]
::
++ flor
~/ %flor
|= [bos=nock nif=nock]
^- nock
2013-09-29 00:21:18 +04:00
?- bos
[1 1] nif
[1 0] bos
*
?- nif
[1 1] bos
[1 0] nif
* [%6 bos [%1 0] nif]
==
==
::
++ hike
2013-09-29 00:21:18 +04:00
~/ %hike
|= [axe=axis pac=(list ,[p=axis q=nock])]
^- nock
2013-09-29 00:21:18 +04:00
?~ pac
[%0 axe]
=+ zet=(skim pac.$ |=([p=axis q=nock] [=(1 p)]))
2013-09-29 00:21:18 +04:00
?~ zet
=+ tum=(skim pac.$ |=([p=axis q=nock] ?&(!=(1 p) =(2 (cap p)))))
=+ gam=(skim pac.$ |=([p=axis q=nock] ?&(!=(1 p) =(3 (cap p)))))
2013-09-29 00:21:18 +04:00
%+ cons
%= $
2014-01-04 11:28:16 +04:00
axe (peg axe 2)
pac (turn tum |=([p=axis q=nock] [(mas p) q]))
2013-09-29 00:21:18 +04:00
==
%= $
2014-01-04 11:28:16 +04:00
axe (peg axe 3)
pac (turn gam |=([p=axis q=nock] [(mas p) q]))
2013-09-29 00:21:18 +04:00
==
?>(?=([* ~] zet) q.i.zet)
::
++ hoax
|= a=@ta
?> =(%ho (end 3 2 a))
%+ add
(mod (add 13 (sub (cut 3 [3 1] a) 'a')) 26)
%+ mul 26
=+ b=(cut 3 [2 1] a)
?+(b !! %o 0, %i 1, %u 2, %e 3, %a 4, %y 5, %w 6, %l 7)
::
++ hoof
|= a=@ ^- @ta
(rap 3 'h' 'o' (snag (div a 26) "oiueaywl") (add 'a' (mod (add a 13) 26)) ~)
::
++ jock
|= rad=?
2013-12-15 11:07:57 +04:00
|= lot=coin ^- twig
2013-09-29 00:21:18 +04:00
?- -.lot
2014-01-05 07:56:33 +04:00
~ ?:(rad [%dtzz p.lot] [%dtzy p.lot])
2013-09-29 00:21:18 +04:00
::
%blob
?: rad
2014-01-05 07:56:33 +04:00
[%dtzz %$ p.lot]
?@(p.lot [%dtzy %$ p.lot] [$(p.lot -.p.lot) $(p.lot +.p.lot)])
2013-09-29 00:21:18 +04:00
::
%many
2013-12-16 03:40:44 +04:00
|-(^-(twig ?~(p.lot [%bczp %null] [^$(lot i.p.lot) $(p.lot t.p.lot)])))
2013-09-29 00:21:18 +04:00
==
::
++ look
~/ %look
|= [cog=term dab=(map term foot)]
=+ axe=1
|-
^- (unit ,[p=axis q=foot])
?- dab
~ ~
[* ~ ~]
2013-09-29 00:21:18 +04:00
?:(=(cog p.n.dab) [~ axe q.n.dab] ~)
::
[* ~ *]
?: =(cog p.n.dab)
[~ (peg axe 2) q.n.dab]
?: (gor cog p.n.dab)
~
$(axe (peg axe 3), dab r.dab)
::
[* * ~]
?: =(cog p.n.dab)
[~ (peg axe 2) q.n.dab]
?: (gor cog p.n.dab)
$(axe (peg axe 3), dab l.dab)
~
::
[* * *]
?: =(cog p.n.dab)
[~ (peg axe 2) q.n.dab]
?: (gor cog p.n.dab)
$(axe (peg axe 6), dab l.dab)
$(axe (peg axe 7), dab r.dab)
==
::
2013-09-29 00:21:18 +04:00
++ make
|= txt=@
q:(~(mint ut %noun) %noun (ream txt))
2013-09-29 00:21:18 +04:00
::
2014-01-05 06:05:33 +04:00
++ noah |=(vax=vase (pave vax))
++ onan |=(vix=vise (seer vix))
2013-09-29 00:21:18 +04:00
++ rain
|= [bon=path txt=@]
2014-03-05 23:00:27 +04:00
^- twig
2013-09-29 00:21:18 +04:00
=+ vaz=vast
2014-02-10 21:50:20 +04:00
~| bon
2013-09-29 00:21:18 +04:00
(scan (trip txt) (full (ifix [gay gay] tall:vaz(wer bon))))
::
++ ream
|= txt=@
2013-12-15 11:07:57 +04:00
^- twig
2013-09-29 00:21:18 +04:00
(rash txt vest)
::
++ reck
|= bon=path
(rain bon ((hard ,@t) .^(%cx (weld bon `path`[%hoon ~]))))
::
++ seed
^- vase
~+
!;(*type ..seed)
::
2014-01-04 11:28:16 +04:00
++ seem |=(toy=typo `type`toy)
++ seer |=(vix=vise `vase`vix)
2013-09-29 00:21:18 +04:00
++ sell
|= vax=vase ^- tank
~| %sell
(dish:ut ~(dole ut p.vax) q.vax)
::
++ pave
|= vax=vase ^- tape
~(ram re (sell vax))
::
++ loot
|= vax=vase ^- @ta
(rap 3 (pave vax))
::
++ slam
|= [gat=vase sam=vase] ^- vase
=+ :- ^= typ ^- type
[%cell p.gat p.sam]
2013-12-15 11:07:57 +04:00
^= gen ^- twig
2013-09-29 00:21:18 +04:00
[%cncl [~ 2] [~ 3]]
=+ gun=(~(mint ut typ) %noun gen)
[p.gun .*([q.gat q.sam] q.gun)]
::
2013-09-29 00:21:18 +04:00
++ slim
|= old=vise ^- vase
old
::
++ slit
|= [gat=type sam=type]
(~(play ut [%cell gat sam]) [%cncl [~ 2] [~ 3]])
::
++ slap
2013-12-15 11:07:57 +04:00
|= [vax=vase gen=twig] ^- vase
2013-09-29 00:21:18 +04:00
=+ gun=(~(mint ut p.vax) %noun gen)
[p.gun .*(q.vax q.gun)]
::
++ slop
|= [hed=vase tal=vase]
^- vase
[[%cell p.hed p.tal] [q.hed q.tal]]
::
2013-09-29 00:21:18 +04:00
++ skol
|= typ=type ^- tank
~(duck ut typ)
::
++ spat |=(pax=path (rap 3 (spud pax)))
++ spud |=(pax=path ~(ram re (dish:ut [~ %path] pax)))
++ slot
|= [axe=@ vax=vase] ^- vase
(slap vax [~ axe])
2013-09-29 00:21:18 +04:00
::
++ slum
|= [vax=vase wad=(map term vase)] ^- vase
?- wad
~ vax
[* ~ ~] [[%cell p.vax [%face p.n.wad p.q.n.wad]] [q.vax q.q.n.wad]]
[* ~ *] $(wad [n.wad ~ ~], vax $(wad r.wad))
[* * ~] $(wad [n.wad ~ ~], vax $(wad l.wad))
[* * *] $(wad [n.wad ~ r.wad], vax $(wad l.wad))
==
::
++ stab
|= zep=@ta ^- path
(need (rush zep ;~(pfix fas ;~(sfix (more fas urs:ab) fas))))
::
++ wash
|= [[tab=@ edg=@] tac=tank] ^- wall
(~(win re tac) tab edg)
2013-09-29 00:21:18 +04:00
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2fB, macro expansion ::
::
2014-01-04 06:59:56 +04:00
++ ah
|_ tig=tiki
++ blue
|= gen=twig
2014-01-04 06:59:56 +04:00
^- twig
?. &(?=(| -.tig) ?=(~ p.tig)) gen
[%tsgr [~ 3] gen]
::
++ gray
|= gen=twig
^- twig
?- -.tig
& ?~(p.tig gen [%tstr u.p.tig q.tig gen])
| [%tsls ?~(p.tig q.tig [%ktts u.p.tig q.tig]) gen]
==
::
++ puce
^- wing
?- -.tig
& ?~(p.tig q.tig [u.p.tig ~])
| [[%& 2] ~]
==
--
::
++ al
2013-12-27 06:43:25 +04:00
~% %al
+>+
==
%bunt bunt
2014-01-04 11:28:16 +04:00
%whip whip
2013-12-27 06:43:25 +04:00
==
2013-09-29 00:21:18 +04:00
=+ [nag=`*`& gom=`axis`1]
|_ sec=tile
::::
2014-01-05 07:56:33 +04:00
++ blah ^~ [%dtzz %$ 0]
2013-12-15 11:07:57 +04:00
++ home |=(gen=twig ^-(twig ?:(=(1 gom) gen [%tsgr [~ gom] gen])))
2013-09-29 00:21:18 +04:00
::::
++ bunt
2013-12-15 11:07:57 +04:00
|- ^- twig
2013-09-29 00:21:18 +04:00
?- sec
[^ *]
[$(sec p.sec) $(sec q.sec)]
::
[%axil *]
2013-09-29 00:21:18 +04:00
?- p.sec
2014-01-05 07:56:33 +04:00
[%atom *] [%dtzy p.p.sec 0]
%noun [%dttr [%dtzz %$ 0] [[%dtzz %$ 0] [%dtzz %$ 1]]]
%cell =+(nec=$(sec [%axil %noun]) [nec nec])
2014-01-05 07:56:33 +04:00
%bean [%dtts [%dtzz %$ 0] [%dtzz %$ 0]]
%null [%dtzz %n %$]
2013-09-29 00:21:18 +04:00
==
::
[%bark *]
[%ktts p.sec $(sec q.sec)]
::
[%bush *]
2013-12-16 03:40:44 +04:00
[%wtcl [%bczp %bean] $(sec p.sec) $(sec q.sec)]
::
2013-09-29 00:21:18 +04:00
[%fern *]
2013-12-15 11:07:57 +04:00
|- ^- twig
2013-09-29 00:21:18 +04:00
?@ t.p.sec
^$(sec i.p.sec)
2013-12-16 03:40:44 +04:00
[%wtcl [%bczp %bean] ^$(sec i.p.sec) $(p.sec t.p.sec)]
2013-09-29 00:21:18 +04:00
::
[%herb *]
2014-01-05 07:18:06 +04:00
(home [%tsgl [%cnzy %$] p.sec])
2013-09-29 00:21:18 +04:00
::
[%kelp *]
2013-12-15 11:07:57 +04:00
|- ^- twig
2013-09-29 00:21:18 +04:00
?@ t.p.sec
^$(sec i.p.sec)
2013-12-16 03:40:44 +04:00
[%wtcl [%bczp %bean] ^$(sec i.p.sec) $(p.sec t.p.sec)]
2013-09-29 00:21:18 +04:00
::
[%leaf *]
2014-01-05 07:56:33 +04:00
[%dtzz p.sec q.sec]
2013-09-29 00:21:18 +04:00
::
[%reed *]
2013-12-16 03:40:44 +04:00
[%wtcl [%bczp %bean] $(sec p.sec) $(sec q.sec)]
2013-09-29 00:21:18 +04:00
::
[%weed *]
2013-09-29 00:21:18 +04:00
(home p.sec)
==
2013-12-17 08:48:40 +04:00
++ clam ^-(twig [%brts [%axil %noun] (whip(gom 7) 6)])
++ cloq
2014-01-16 10:43:56 +04:00
|- ^- [p=toga q=tile]
?: ?=(^ -.sec)
=+ [one=$(sec p.sec) two=$(sec q.sec)]
[[%2 p.one p.two] [q.one q.two]]
?. ?=(%bark -.sec) [[%0 ~] sec]
=+ got=$(sec q.sec)
:_ q.got
?:(?=([%0 ~] p.got) p.sec [%1 p.sec p.got])
::
2013-09-29 00:21:18 +04:00
++ whip
|= axe=axis
=+ ^= tun
2013-12-16 05:15:04 +04:00
|= noy=$+(* twig)
2013-12-15 11:07:57 +04:00
^- twig
2013-09-29 00:21:18 +04:00
?@ nag
=+ luz=[%cnts [[~ 1] ~] [[[%& axe] ~] bunt(sec [%axil %cell])] ~]
2013-09-29 00:21:18 +04:00
?: =(& nag)
2014-01-01 10:48:21 +04:00
[%tsgr [%wtpt [[%& axe] ~] luz [~ 1]] (noy [& &])]
2013-09-29 00:21:18 +04:00
[%tsgr luz (noy [& &])]
(noy nag)
2013-12-15 11:07:57 +04:00
^- twig
?- sec
2013-09-29 00:21:18 +04:00
[^ *]
2013-12-15 11:07:57 +04:00
%- tun |= gon=* => .(nag gon) ^- twig
2013-09-29 00:21:18 +04:00
:- ^$(sec -.sec, nag -.nag, axe (peg axe 2))
^$(sec +.sec, nag +.nag, axe (peg axe 3))
::
[%axil *]
2013-09-29 00:21:18 +04:00
?- p.sec
[%atom *]
2013-09-29 00:21:18 +04:00
=+ buv=bunt
2013-12-15 11:07:57 +04:00
|- ^- twig
2013-09-29 00:21:18 +04:00
?@ nag
2014-01-01 10:48:21 +04:00
?:(=(& nag) [%wtpt [[%& axe] ~] $(nag |) buv] [%ktls buv [~ axe]])
2013-09-29 00:21:18 +04:00
buv
::
%noun
[%kthp [%axil %noun] [~ axe]]
2013-09-29 00:21:18 +04:00
::
%cell
2013-09-29 00:21:18 +04:00
=+ buv=bunt
2013-12-15 11:07:57 +04:00
|- ^- twig
?@ nag
2014-01-01 10:48:21 +04:00
?:(=(& nag) [%wtpt [[%& axe] ~] buv $(nag [& &])] buv)
2013-09-29 00:21:18 +04:00
[%ktls buv [~ axe]]
::
%bean
:^ %wtcl
2014-01-05 07:56:33 +04:00
[%dtts [%dtzz %$ |] [~ axe]]
[%dtzz %f |]
[%dtzz %f &]
2013-09-29 00:21:18 +04:00
::
%null
bunt
2013-09-29 00:21:18 +04:00
==
::
[%bark *]
[%ktts p.sec $(sec q.sec)]
::
[%bush *]
2013-12-16 22:53:22 +04:00
%- tun |= gon=* => .(nag gon) ^- twig
?@ -.nag
?: =(& -.nag)
2014-01-01 10:48:21 +04:00
[%wtpt [[%& (peg axe 2)] ~] ^$(sec q.sec) ^$(sec p.sec)]
2013-12-16 22:53:22 +04:00
^$(sec q.sec)
^$(sec p.sec)
::
2013-09-29 00:21:18 +04:00
[%fern *]
2013-12-15 11:07:57 +04:00
|- ^- twig
2013-09-29 00:21:18 +04:00
?@ t.p.sec
^$(sec i.p.sec)
:+ %tsls
^$(sec i.p.sec)
=> .(axe (peg 3 axe), gom (peg 3 gom))
:^ %wtcl
[%dtts [~ axe] [~ 2]]
[~ 2]
$(i.p.sec i.t.p.sec, t.p.sec t.t.p.sec)
::
[%herb *]
[%cnhp (home p.sec) [~ axe] ~]
::
[%kelp *]
%- tun |= gon=* => .(nag gon)
2013-12-15 11:07:57 +04:00
|- ^- twig
2013-09-29 00:21:18 +04:00
?@ t.p.sec
2014-01-05 07:56:33 +04:00
:- [%dtzz +.p.i.p.sec]
2013-09-29 00:21:18 +04:00
^^$(axe (peg axe 3), sec q.i.p.sec, nag &)
:^ %wtcl
2014-01-05 07:56:33 +04:00
[%dtts [~ (peg axe 2)] [%dtzz +.p.i.p.sec]]
:- [%dtzz +.p.i.p.sec]
2013-09-29 00:21:18 +04:00
^^$(axe (peg axe 3), sec q.i.p.sec, nag &)
$(i.p.sec i.t.p.sec, t.p.sec t.t.p.sec)
::
[%leaf *]
2014-01-05 07:56:33 +04:00
[%dtzz p.sec q.sec]
2013-09-29 00:21:18 +04:00
::
[%reed *]
2013-12-16 22:53:22 +04:00
?- nag
2014-01-01 10:48:21 +04:00
& [%wtpt [[%& axe] ~] $(sec p.sec, nag |) $(sec q.sec, nag [& &])]
2013-12-16 22:53:22 +04:00
| $(sec p.sec)
^ $(sec q.sec)
* !!
==
2013-09-29 00:21:18 +04:00
::
[%weed *]
2014-01-16 10:43:56 +04:00
(home p.sec)
2013-09-29 00:21:18 +04:00
==
--
2013-09-29 00:21:18 +04:00
::
++ ap
~% %ap
2013-09-29 00:21:18 +04:00
+>
==
%etch etch
%open open
%rake rake
==
2013-12-15 11:07:57 +04:00
|_ gen=twig
2013-09-29 00:21:18 +04:00
++ etch
~| %etch
|- ^- term
?: ?=([%ktts *] gen)
2013-12-18 05:47:20 +04:00
?>(?=(@ p.gen) p.gen)
2013-09-29 00:21:18 +04:00
=+ voq=~(open ap gen)
?<(=(gen voq) $(gen voq))
::
2014-01-04 11:28:16 +04:00
++ feck
|- ^- (unit term)
?- gen
2014-01-05 07:56:33 +04:00
[%dtzy %tas *] [~ q.gen]
[%dtzz %tas @] [~ q.gen]
2014-01-04 11:28:16 +04:00
[%zpcb *] $(gen q.gen)
* ~
==
::
2013-12-21 04:59:03 +04:00
++ hock
2014-01-16 10:43:56 +04:00
|- ^- toga
2013-12-17 23:13:44 +04:00
?- gen
2013-12-21 04:59:03 +04:00
[^ *] [%2 $(gen p.gen) $(gen q.gen)]
2014-01-05 07:31:24 +04:00
[%cnts [@ ~] ~] i.p.gen
2014-01-05 07:18:06 +04:00
[%cnzy @] p.gen
[%cnzz [@ ~]] i.p.gen
2013-12-17 23:13:44 +04:00
[%zpcb *] $(gen q.gen)
2013-12-21 04:59:03 +04:00
* =+(neg=open ?:(=(gen neg) [%0 ~] $(gen neg)))
2013-12-17 23:13:44 +04:00
==
::
2013-09-29 00:21:18 +04:00
++ open
2013-12-15 11:07:57 +04:00
^- twig
2013-09-29 00:21:18 +04:00
?- gen
2013-12-15 13:48:16 +04:00
[~ *] [%cnts [gen ~] ~]
2013-12-16 06:44:44 +04:00
[%bccm *] ~(clam al p.gen)
[%bccb *] ~(bunt al p.gen)
[%bctr *] [%ktsg ~(bunt al p.gen)]
2013-12-17 08:48:40 +04:00
[%bczp *] [%bccb %axil p.gen]
2013-12-16 06:44:44 +04:00
[%brcb *] [%tsls [%bctr p.gen] [%brcn q.gen]]
2013-09-29 00:21:18 +04:00
[%brdt *] [%brcn (~(put by *(map term foot)) %$ [%ash p.gen])]
2014-02-10 21:50:20 +04:00
[%brtr *] [%brfs p.gen (~(put by *(map term foot)) %$ [%elm q.gen])]
2013-12-20 21:34:13 +04:00
[%brfs *] ~| %elm-tile
2013-12-21 04:59:03 +04:00
=+ lyg=~(cloq al p.gen)
2013-12-20 21:34:13 +04:00
:+ %brcb q.lyg
%- ~(run by q.gen)
|= a=foot ^- foot
?. ?=(%elm -.a) a
:- -.a
:+ %tsgl p.a
2013-12-20 21:34:13 +04:00
:+ %cnts ~
:~ [[[%& 6] ~] [%ktts p.lyg [~ 6]]]
==
2014-01-05 07:18:06 +04:00
[%brkt *] [%tsgr [%brcn (~(put by q.gen) %$ [%ash p.gen])] [%cnzy %$]]
2013-12-15 10:12:58 +04:00
[%brls *] [%ktbr [%brts p.gen q.gen]]
2014-01-16 10:43:56 +04:00
[%brhp *] [%tsgl [%cnzy %$] [%brdt p.gen]]
2013-12-15 10:12:58 +04:00
[%brts *] [%brcb p.gen (~(put by *(map term foot)) %$ [%ash q.gen])]
2013-09-29 00:21:18 +04:00
[%brwt *] [%ktwt %brdt p.gen]
[%clkt *] [p.gen q.gen r.gen s.gen]
2014-01-05 07:56:33 +04:00
[%clfs *] =+(zoy=[%dtzz %ta %$] [%clsg [zoy [%clsg [zoy p.gen] ~]] ~])
2013-09-29 00:21:18 +04:00
[%clls *] [p.gen q.gen r.gen]
[%clcb *] [q.gen p.gen]
2013-12-16 03:40:44 +04:00
[%clcn *] [[%clsg p.gen] [%bczp %null]]
2013-09-29 00:21:18 +04:00
[%clhp *] [p.gen q.gen]
[%clsg *]
2013-12-15 11:07:57 +04:00
|- ^- twig
?~ p.gen
2014-01-05 07:56:33 +04:00
[%dtzz %n ~]
2014-03-26 04:48:22 +04:00
[i.p.gen $(p.gen t.p.gen)]
2013-09-29 00:21:18 +04:00
::
[%cltr *]
2013-12-15 11:07:57 +04:00
|- ^- twig
2013-09-29 00:21:18 +04:00
?~ p.gen
[%zpzp ~]
2014-03-26 04:48:22 +04:00
?~ t.p.gen
i.p.gen
[i.p.gen $(p.gen t.p.gen)]
::
2014-01-05 07:18:06 +04:00
[%cncb *] [%ktls [%cnzz p.gen] %cnts p.gen q.gen]
2013-09-29 00:21:18 +04:00
[%cncl *] [%cnsg [%$ ~] p.gen q.gen]
[%cndt *] [%cnhp q.gen [p.gen ~]]
[%cnkt *] [%cnhp p.gen q.gen r.gen s.gen ~]
[%cnls *] [%cnhp p.gen q.gen r.gen ~]
[%cnhp *]
2014-01-16 10:43:56 +04:00
?~(q.gen [%tsgr p.gen [%cnzy %$]] [%cncl p.gen [%cltr q.gen]])
2013-09-29 00:21:18 +04:00
::
2013-12-15 13:48:16 +04:00
[%cnsg *] [%cntr p.gen q.gen [[[[%& 6] ~] r.gen] ~]]
2013-09-29 00:21:18 +04:00
[%cntr *]
:+ %tsls
q.gen
:+ %cnts
(weld p.gen `wing`[[~ 2] ~])
2013-12-21 06:35:33 +04:00
(turn r.gen |=([p=wing q=twig] [p [%tsgr [~ 3] q]]))
2013-09-29 00:21:18 +04:00
::
2014-01-05 07:31:24 +04:00
[%cnzy *] [%cnts [p.gen ~] ~]
[%cnzz *] [%cnts p.gen ~]
2014-01-05 07:18:06 +04:00
[%hxgl *] [%cnhp [%cnzy %noah] [%zpgr [%cltr p.gen]] ~]
[%hxgr *] [%cnhp [%cnzy %cain] [%zpgr [%cltr p.gen]] ~]
2013-09-29 00:21:18 +04:00
::
[%ktdt *] [%ktls [%cnhp p.gen q.gen ~] q.gen]
2013-12-14 01:11:26 +04:00
[%kthp *] [%ktls ~(bunt al p.gen) q.gen]
[%sgbr *]
2014-01-05 02:57:44 +04:00
:+ %sggr
:- %mean
=+ fek=~(feck ap p.gen)
2014-01-05 07:56:33 +04:00
?^ fek [%dtzz %tas u.fek]
2014-01-05 07:18:06 +04:00
[%brdt [%cnhp [%cnzy %cain] [%zpgr p.gen] ~]]
q.gen
2014-01-05 02:57:44 +04:00
::
[%sgcb *] [%sggr [%mean [%brdt p.gen]] q.gen]
2013-09-29 00:21:18 +04:00
[%sgcn *]
:+ %sggl
:- %fast
:- %clls
2014-01-05 07:56:33 +04:00
:+ [%dtzz %$ p.gen]
2013-09-29 00:21:18 +04:00
[%zpts q.gen]
:- %clsg
2013-12-15 11:07:57 +04:00
=+ nob=`(list twig)`~
|- ^- (list twig)
2013-09-29 00:21:18 +04:00
?@ r.gen
nob
2014-01-05 07:56:33 +04:00
[[[%dtzz %$ p.i.r.gen] [%zpts q.i.r.gen]] $(r.gen t.r.gen)]
2013-09-29 00:21:18 +04:00
s.gen
::
[%sgfs *] [%sgcn p.gen [~ 7] ~ q.gen]
[%sggl *] [%tsgl [%sggr p.gen [~ 1]] q.gen]
2014-01-05 07:56:33 +04:00
[%sgbc *] [%sggr [%live [%dtzz %$ p.gen]] q.gen]
[%sgls *] [%sggr [%memo %dtzz %$ p.gen] q.gen]
2013-09-29 00:21:18 +04:00
[%sgpm *]
:+ %sggr
2014-01-05 07:56:33 +04:00
[%slog [%dtzy %$ p.gen] [%cnhp [%cnzy %cain] [%zpgr q.gen] ~]]
2013-09-29 00:21:18 +04:00
r.gen
::
[%sgts *] [%sggr [%germ p.gen] q.gen]
[%sgwt *] [%tsgl s.gen %wtdt q.gen [~ 1] %sgpm p.gen r.gen [~ 1]]
2013-09-29 00:21:18 +04:00
[%smcl *]
?- q.gen
~ [%zpzp ~]
[* ~] i.q.gen
^
:+ %tsls
p.gen
2013-12-15 11:07:57 +04:00
=+ yex=`(list twig)`q.gen
|- ^- twig
?- yex
2013-09-29 00:21:18 +04:00
[* ~] [%tsgr [~ 3] i.yex]
[* ^] [%cnhp [~ 2] [%tsgr [~ 3] i.yex] $(yex t.yex) ~]
~ !!
==
==
::
[%smdq *] :: ;"
:+ %tsgr [%ktts %v ~ 1] :: => v=.
:- %brhp :: |-
:+ %ktls :: ^+
2013-09-29 00:21:18 +04:00
:- %brhp :: |-
:^ %wtcl :: ?:
2013-12-16 03:40:44 +04:00
[%bczp %bean] :: ?
[%bczp %null] :: ~
2014-01-05 07:56:33 +04:00
:- [%ktts %i [%dtzy 'tD' _@]] :: :- i=~~
2014-01-05 07:18:06 +04:00
[%ktts %t [%cnzy %$]] :: t=$
2013-12-15 11:07:57 +04:00
|- ^- twig ::
2013-09-29 00:21:18 +04:00
?~ p.gen ::
2013-12-16 03:40:44 +04:00
[%bczp %null] :: ~
2013-09-29 00:21:18 +04:00
=+ res=$(p.gen t.p.gen) ::
2013-12-15 11:07:57 +04:00
^- twig ::
2013-09-29 00:21:18 +04:00
?@ i.p.gen ::
2014-01-05 07:56:33 +04:00
[[%dtzy 'tD' i.p.gen] res] :: [~~{i.p.gen} {res}]
2013-09-29 00:21:18 +04:00
:+ %tsls ::
:- :+ %ktts :: ^=
%a :: a
:+ %ktls :: ^+
2014-01-05 07:18:06 +04:00
[%cnzy %$] :: $
[%tsgr [%cnzy %v] p.i.p.gen] :: =>(v {p.i.p.gen})
2013-09-29 00:21:18 +04:00
[%ktts %b res] :: b={res}
2013-12-15 11:07:57 +04:00
^- twig ::
2013-09-29 00:21:18 +04:00
:- %brhp :: |-
:^ %wtpt :: ?@
2014-01-01 10:48:21 +04:00
[%a ~] :: a
2014-01-05 07:18:06 +04:00
[%cnzy %b] :: b
:- [%tsgl [~ 2] [%cnzy %a]] :: :- -.a
2013-12-15 13:48:16 +04:00
:+ %cnts :: %=
2013-09-29 00:21:18 +04:00
[%$ ~] :: $
2014-02-10 21:50:20 +04:00
[[[%a ~] [%tsgl [~ 3] [%cnzy %a]]] ~] :: a +.a
2013-09-29 00:21:18 +04:00
::
[%smdt *] :: ;.
:+ %tsgr [%ktts %v ~ 1] :: => v=.
2014-01-05 07:18:06 +04:00
:+ %tsls [%ktts %a [%tsgr [%cnzy %v] p.gen]] :: =+ a==>(v {p.gen})
2013-12-15 11:07:57 +04:00
|- ^- twig ::
2013-09-29 00:21:18 +04:00
?~ q.gen ::
2014-01-05 07:18:06 +04:00
[%cnzy %a] :: a
2014-01-01 10:48:21 +04:00
:^ %wtsg [%a ~] :: ?~ a
2013-12-16 03:40:44 +04:00
[%bczp %null] :: ~
2013-09-29 00:21:18 +04:00
:+ %tsgr :: =>
2013-12-15 13:48:16 +04:00
:+ %cnts [[~ 1] ~] :: %= .
2013-12-15 12:33:53 +04:00
:~ :- [%a ~] :: a
2013-09-29 00:21:18 +04:00
:+ %tsgr :: =>
2014-01-05 07:18:06 +04:00
[[%cnzy %v] [%tsgl [~ 3] [%cnzy %a]]] :: [v +.a]
2013-09-29 00:21:18 +04:00
i.q.gen ::
== :: ==
$(q.gen t.q.gen) ::
::
[%smsg *] :: ;~
2013-12-15 11:07:57 +04:00
|- ^- twig
2013-09-29 00:21:18 +04:00
?- q.gen
~ ~|(%open-smsg !!)
^
:+ %tsgr [%ktts %v ~ 1] :: => v=.
2013-12-15 11:07:57 +04:00
|- ^- twig ::
2013-09-29 00:21:18 +04:00
?: ?=(~ t.q.gen) ::
2014-01-05 07:18:06 +04:00
[%tsgr [%cnzy %v] i.q.gen] :: =>(v {i.q.gen})
2013-09-29 00:21:18 +04:00
:+ %tsls [%ktts %a $(q.gen t.q.gen)] :: =+ ^= a
:+ %tsls :: {$(q.gen t.q.gen)}
2014-01-05 07:18:06 +04:00
[%ktts %b [%tsgr [%cnzy %v] i.q.gen]] :: =+ ^= b
2013-09-29 00:21:18 +04:00
:+ %tsls :: =>(v {i.q.gen})
2014-01-05 07:18:06 +04:00
[%ktts %c [%tsgl [~ 6] [%cnzy %b]]] :: =+ c=+6.b
2013-09-29 00:21:18 +04:00
:- %brdt :: |.
:^ %cnls :: %+
2014-01-05 07:18:06 +04:00
[%tsgr [%cnzy %v] p.gen] :: =>(v {p.gen})
[%cnhp [%cnzy %b] [%cnzy %c] ~] :: (b c)
[%cnts [%a ~] [[[[%& 6] ~] [%cnzy %c]] ~]] :: a(+6 c)
2013-09-29 00:21:18 +04:00
==
::
[%smsm *] :: ;;
:+ %tsgr [%ktts %v ~ 1] :: => v=.
2014-01-05 07:18:06 +04:00
:+ %tsls [%ktts %a [%tsgr [%cnzy %v] p.gen]] :: =+ a==>(v {p.gen})
:+ %tsls [%ktts %b [%tsgr [%cnzy %v] q.gen]] :: =+ b==>(v {q.gen})
2013-09-29 00:21:18 +04:00
:+ %tsls :: =+ c=(a b)
2014-01-05 07:18:06 +04:00
[%ktts %c [%cnhp [%cnzy %a] [%cnzy %b] ~]] ::
[%wtgr [%dtts [%cnzy %c] [%cnzy %b]] [%cnzy %c]] :: ?>(=(c b) c)
2013-09-29 00:21:18 +04:00
::
[%tsbr *]
2013-12-15 07:04:52 +04:00
[%tsls ~(bunt al p.gen) q.gen]
2013-09-29 00:21:18 +04:00
::
[%tscl *]
2013-09-29 00:21:18 +04:00
[%tsgr [%cncb [[~ 1] ~] p.gen] q.gen]
::
[%tsdt *]
2013-09-29 00:21:18 +04:00
[%tsgr [%cncb [[~ 1] ~] [[p.gen q.gen] ~]] r.gen]
::
[%tskt *] :: =^
=+ cog=rusk(gen p.gen) ::
2013-12-15 13:48:16 +04:00
=+ wuy=(weld rake(gen q.gen) `wing`[%v ~]) ::
2013-09-29 00:21:18 +04:00
:+ %tsgr [%ktts %v ~ 1] :: => v=.
2014-01-05 07:18:06 +04:00
:+ %tsls [%ktts %a %tsgr [%cnzy %v] r.gen] :: =+ a==>(v \r.gen)
:^ %tsdt wuy [%tsgl [~ 3] [%cnzy %a]] :: =. \wuy +.a
2013-09-29 00:21:18 +04:00
:+ %tsgr :- :+ %ktts cog :: => :- ^= \cog
2014-01-05 07:18:06 +04:00
[%tsgl [~ 2] [%cnzy %a]] :: -.a
[%cnzy %v] :: v
2013-09-29 00:21:18 +04:00
s.gen :: s.gen
::
[%tsgl *] [%tsgr q.gen p.gen]
[%tsls *] [%tsgr [p.gen [~ 1]] q.gen]
[%tshp *] [%tsls q.gen p.gen]
[%tssg *]
2013-12-15 11:07:57 +04:00
|- ^- twig
2013-09-29 00:21:18 +04:00
?~ p.gen [%zpzp ~]
?~ t.p.gen i.p.gen
[%tsgr i.p.gen $(p.gen t.p.gen)]
2014-02-10 21:50:20 +04:00
::
2013-09-29 00:21:18 +04:00
[%wtbr *]
|-
2014-01-05 07:56:33 +04:00
?@(p.gen [%dtzz %f 1] [%wtcl i.p.gen [%dtzz %f 0] $(p.gen t.p.gen)])
2013-09-29 00:21:18 +04:00
::
[%wtdt *] [%wtcl p.gen r.gen q.gen]
[%wtgl *] [%wtcl p.gen [%zpzp ~] q.gen]
[%wtgr *] [%wtcl p.gen q.gen [%zpzp ~]]
2013-12-27 06:43:25 +04:00
[%wtkt *] [%wtcl [%wtts [%axil %atom %$] p.gen] r.gen q.gen]
2013-09-29 00:21:18 +04:00
[%wthp *]
|-
?@ q.gen
2014-01-05 07:18:06 +04:00
[%zpfs [%cnzz p.gen]]
2013-09-29 00:21:18 +04:00
:^ %wtcl
[%wtts p.i.q.gen p.gen]
q.i.q.gen
$(q.gen t.q.gen)
2013-12-15 10:27:48 +04:00
::
[%wtls *] [%wthp p.gen (weld r.gen `_r.gen`[[[%axil %noun] q.gen] ~])]
2013-09-29 00:21:18 +04:00
[%wtpm *]
|-
2014-01-05 07:56:33 +04:00
?@(p.gen [%dtzz %f 0] [%wtcl i.p.gen $(p.gen t.p.gen) [%dtzz %f 1]])
2013-09-29 00:21:18 +04:00
::
2013-12-27 06:43:25 +04:00
[%wtpt *] [%wtcl [%wtts [%axil %atom %$] p.gen] q.gen r.gen]
[%wtsg *] [%wtcl [%wtts [%axil %null] p.gen] q.gen r.gen]
2014-01-05 07:56:33 +04:00
[%wtzp *] [%wtcl p.gen [%dtzz %f 1] [%dtzz %f 0]]
2014-01-04 06:59:56 +04:00
::
[%wthz *]
2014-01-04 06:59:56 +04:00
=+ vaw=~(. ah p.gen)
%- gray:vaw
[%wthp puce:vaw (turn q.gen |=([a=tile b=twig] [a (blue:vaw b)]))]
::
[%wtlz *]
=+ vaw=~(. ah p.gen)
%- gray:vaw
^- twig
:+ %wtls puce:vaw
2014-01-04 06:59:56 +04:00
[(blue:vaw q.gen) (turn r.gen |=([a=tile b=twig] [a (blue:vaw b)]))]
::
[%wtsz *]
=+ vaw=~(. ah p.gen)
%- gray:vaw
[%wtsg puce:vaw (blue:vaw q.gen) (blue:vaw r.gen)]
::
[%wtkz *]
=+ vaw=~(. ah p.gen)
%- gray:vaw
[%wtkt puce:vaw (blue:vaw q.gen) (blue:vaw r.gen)]
::
[%wtpz *]
=+ vaw=~(. ah p.gen)
%- gray:vaw
[%wtpt puce:vaw (blue:vaw q.gen) (blue:vaw r.gen)]
::
2013-09-29 00:21:18 +04:00
[%zpcb *] q.gen
[%zpgr *]
2014-01-05 07:18:06 +04:00
[%cnhp [%cnzy %onan] [%zpsm [%bctr [%herb [%cnzy %abel]]] p.gen] ~]
2014-01-05 06:05:33 +04:00
::
2014-01-05 05:15:52 +04:00
[%zpwt *]
?: ?: ?=(@ p.gen)
(lte stub p.gen)
&((lte stub p.p.gen) (gte stub q.p.gen))
q.gen
2014-01-05 05:15:52 +04:00
~|([%stub-fail stub p.gen] !!)
::
2013-09-29 00:21:18 +04:00
* gen
==
::
++ rake
^- wing
?- gen
[~ *] [gen ~]
2014-01-05 07:18:06 +04:00
[%cnzy *] [p.gen ~]
[%cnzz *] p.gen
2013-09-29 00:21:18 +04:00
[%cnts * ~] p.gen
[%zpcb *] rake(gen q.gen)
2013-12-15 11:07:57 +04:00
* ~|(%rake-twig !!)
2013-09-29 00:21:18 +04:00
==
++ rusk
^- term
=+ wig=rake
?. ?=([@ ~] wig)
2013-12-15 11:07:57 +04:00
~|(%rusk-twig !!)
2013-09-29 00:21:18 +04:00
i.wig
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2fC, compilation proper ::
::
++ ut
~% %ut
+>+
==
%fan fan
%rib rib
%vet vet
%fab fab
%burn burn
2014-01-04 06:59:56 +04:00
%busk busk
2013-09-29 00:21:18 +04:00
%crop crop
2013-12-05 02:30:09 +04:00
%duck duck
%dune dune
2013-09-29 00:21:18 +04:00
%dunk dunk
%fink fink
%fire fire
%firm firm
%fish fish
%fuse fuse
%gain gain
%heal heal
%lose lose
%mint mint
%moot moot
%mull mull
%nest nest
%play play
%park park
%peek peek
%repo repo
%rest rest
2014-01-05 06:05:33 +04:00
%sift sift
2013-09-29 00:21:18 +04:00
%seek seek
%tack tack
%tock tock
%wrap wrap
==
2013-12-15 11:07:57 +04:00
=+ :* fan=*(set ,[type twig])
rib=*(set ,[type type twig])
2013-09-29 00:21:18 +04:00
vet=`?`&
fab=`?`&
==
=+ sut=`type`%noun
|%
++ burn
=+ gil=*(set type)
|- ^- *
?- sut
[%atom *] 0
2014-03-03 02:31:03 +04:00
[%bull *] $(sut repo)
2013-09-29 00:21:18 +04:00
[%cell *] [$(sut p.sut) $(sut q.sut)]
[%core *] [p.r.q.sut $(sut p.sut)]
[%cube *] p.sut
[%face *] $(sut repo)
[%fork *] $(sut p.sut)
[%hold *] ?: (~(has in gil) sut)
2014-01-05 02:57:44 +04:00
~_ (dunk %type)
2013-12-23 03:32:30 +04:00
~|(%burn-loop !!)
2013-09-29 00:21:18 +04:00
$(sut repo, gil (~(put in gil) sut))
%noun 0
%void ~|(%burn-void !!)
==
::
2014-01-04 06:59:56 +04:00
++ busk
~/ %busk
|= [cog=term hyp=wing]
^- type
(bull [cog hyp (seep %both hyp)] sut)
::
2013-12-21 05:02:26 +04:00
++ conk
2014-01-16 10:43:56 +04:00
|= got=toga
^- type
?@ got [%face got sut]
?- -.got
0 sut
1 [%face p.got $(got q.got)]
2 ?> |(!vet (nest(sut [%cell %noun %noun]) & sut))
:+ %cell
$(got p.got, sut (peek %both 2))
$(got q.got, sut (peek %both 3))
==
::
2013-09-29 00:21:18 +04:00
++ crop
~/ %crop
|= ref=type
=+ bix=*(set ,[type type])
=< dext
|%
++ dext
^- type
~| %crop-dext
2014-01-05 02:57:44 +04:00
:: ~_ (dunk 'dext: sut')
:: ~_ (dunk(sut ref) 'dext: ref')
2013-09-29 00:21:18 +04:00
?: |(=(sut ref) =(%noun ref))
%void
?: =(%void ref)
sut
?- sut
[%atom *]
2013-09-29 00:21:18 +04:00
?- ref
[%atom *] %void
[%cell *] sut
* sint
==
::
2014-01-04 06:59:56 +04:00
[%bull *] (bull p.sut dext(sut q.sut))
[%cell *]
2013-09-29 00:21:18 +04:00
?- ref
[%atom *] sut
[%cell *] ?: (nest(sut p.ref) | p.sut)
(cell p.sut dext(sut q.sut, ref q.ref))
sut
* sint
==
::
[%core *]
?: ?=(?([%atom *] [%cell *]) ref)
sut
sint
::
[%cube *]
?: &(?=([%cube *] ref) =(p.sut p.ref))
%void
?: ?=(?([%atom *] [%cell *]) ref)
=+ foz=dext(sut q.sut)
?: (firm(sut foz) p.sut)
(cube p.sut foz)
%void
sint
::
[%face *] (face p.sut dext(sut q.sut))
[%fork *] (fork dext(sut p.sut) dext(sut q.sut))
[%hold *]
2013-09-29 00:21:18 +04:00
?: (~(has in bix) [sut ref])
~|(%crop-loop !!)
(reco |=(a=type dext(sut a, bix (~(put in bix) [sut ref]))))
::
%noun (reco |=(a=type dext(sut a)))
%void %void
==
::
++ sint
^- type
?- ref
[%core *] sut
[%cube *] sut
[%face *] dext(ref repo(sut ref))
[%fork *] dext(sut dext(ref p.ref), ref q.ref)
[%hold *] dext(ref repo(sut ref))
* !!
==
--
::
2013-12-31 23:30:37 +04:00
++ cool
|= [pol=? hyp=wing ref=type]
^- type
=+ peh=`wing`(flop hyp)
|- ^- type
?~ peh
?:(pol (fuse ref) (crop ref))
=> .(i.peh ?^(i.peh i.peh [%| p=0 q=i.peh]))
=+ ^= poz ^- post
?- -.i.peh
& [p.i.peh %& (peek %both p.i.peh)]
| (finq p.i.peh %both q.i.peh)
==
|- ^- type
?: =(1 p.poz)
?- -.q.poz
0 ?- -.i.peh
& ^$(peh t.peh)
| (face q.i.peh ^$(peh t.peh, sut p.q.poz))
==
1 ^$(peh t.peh)
2 %+ bull
[p.p.q.poz q.p.q.poz r.p.q.poz ^$(peh t.peh, sut s.p.q.poz)]
2014-01-02 00:47:18 +04:00
q.q.poz
2013-12-31 23:30:37 +04:00
==
=+ [now=(cap p.poz) lat=(mas p.poz)]
=+ vil=*(set type)
|- ^- type
?- sut
[%atom *] %void
2014-01-02 00:47:18 +04:00
[%bull *] (reco |=(p=type (bull p.sut ^$(sut p))))
2013-12-31 23:30:37 +04:00
[%cell *]
?: =(2 now)
(cell ^$(p.poz lat, sut p.sut) q.sut)
(cell p.sut ^$(p.poz lat, sut q.sut))
::
[%core *] ?.(=(3 now) sut (core ^$(p.poz lat, sut p.sut) q.sut))
[%cube *] (reco |=(p=type ^$(sut p)))
[%face *] (reco |=(p=type (face p.sut ^$(sut p))))
[%fork *]
?: (~(has in vil) sut)
%void
=> .(vil (~(put in vil) sut))
(fork $(sut p.sut) $(sut q.sut))
::
[%hold *] (reco |=(p=type ^$(sut p)))
%noun (reco |=(p=type ^$(sut p)))
%void %void
==
2013-09-29 00:21:18 +04:00
::
++ dank |=(pax=path ^-(tank (dish [~ %path] pax)))
++ dart |=(pax=path ^-(tape ~(ram re (dank pax))))
++ deal |=(lum=* (dish dole lum))
++ dial
|= ham=calf
=+ gid=*(set ,@ud)
|- ^- tank
?- q.ham
%noun [%leaf '*' ~]
%path [%leaf '/' ~]
%tank [%leaf '*' 't' ~]
%void [%leaf '#' ~]
%wool [%leaf '*' '"' '"' ~]
%wall [%leaf '*' '\'' '\'' ~]
%yarn [%leaf '"' '"' ~]
[%atom *] [%leaf '@' (trip p.q.ham)]
[%core *]
:+ %rose
[[' ' ~] ['<' ~] ['>' ~]]
|- ^- (list tank)
?~ p.q.ham
2013-09-29 00:21:18 +04:00
[^$(q.ham q.q.ham) ~]
[[%leaf (rip 3 i.p.q.ham)] $(p.q.ham t.p.q.ham)]
::
[%face *]
[%palm [['=' ~] ~ ~ ~] [%leaf (trip p.q.ham)] $(q.ham q.q.ham) ~]
::
[%list *]
2013-12-21 06:35:33 +04:00
[%rose [" " (weld (trip p.q.ham) "(") ")"] $(q.ham q.q.ham) ~]
2013-09-29 00:21:18 +04:00
::
[%pick *]
:+ %rose
[[' ' ~] ['{' ~] ['}' ~]]
|- ^- (list tank)
?~(p.q.ham ~ [^$(q.ham i.p.q.ham) $(p.q.ham t.p.q.ham)])
::
2013-09-29 00:21:18 +04:00
[%plot *]
:+ %rose
[[' ' ~] ['[' ~] [']' ~]]
|- ^- (list tank)
?~(p.q.ham ~ [^$(q.ham i.p.q.ham) $(p.q.ham t.p.q.ham)])
::
2013-09-29 00:21:18 +04:00
[%pear *]
[%leaf '%' ~(rend co [~ p.q.ham q.q.ham])]
::
[%stop *]
?: (~(has in gid) p.q.ham)
[%leaf '$' ~(rend co [~ %ud p.q.ham])]
:+ %palm
[['.' ~] ['^' '$' ~(rend co [~ %ud p.q.ham])] ~ ~]
2013-09-29 00:21:18 +04:00
[$(gid (~(put in gid) p.q.ham), q.ham (need (~(get by p.ham) p.q.ham))) ~]
::
[%tree *]
2013-12-21 06:35:33 +04:00
[%rose [" " (weld (trip p.q.ham) "(") ")"] $(q.ham q.q.ham) ~]
2013-09-29 00:21:18 +04:00
::
[%unit *]
2013-12-21 06:35:33 +04:00
[%rose [" " (weld (trip p.q.ham) "(") ")"] $(q.ham q.q.ham) ~]
2013-09-29 00:21:18 +04:00
==
::
++ dish
2014-03-08 04:31:36 +04:00
|= [ham=calf lum=*] ^- tank !:
2013-09-29 00:21:18 +04:00
~| [%dish-h ?@(q.ham q.ham -.q.ham)]
2014-03-08 04:31:36 +04:00
~| [%lump lum]
~| [%ham ham]
2013-09-29 00:21:18 +04:00
%- need
2014-03-05 23:00:27 +04:00
=| gil=(set ,[@ud *])
2013-09-29 00:21:18 +04:00
|- ^- (unit tank)
?- q.ham
%noun
%= $
q.ham
?: ?=(@ lum)
[%atom %$]
:- %plot
|- ^- (list wine)
[%noun ?:(?=(@ +.lum) [[%atom %$] ~] $(lum +.lum))]
==
::
%path
:- ~
:+ %rose
[['/' ~] ['/' ~] ~]
|- ^- (list tank)
?@ lum
?>(?=(~ lum) ~)
?> ?=(@ -.lum)
2013-09-29 00:21:18 +04:00
[[%leaf (rip 3 -.lum)] $(lum +.lum)]
::
%tank
=+ cis=(tank lum)
?.(=(lum cis) ~ [~ cis])
::
%wall
:- ~
:+ %rose
[[' ' ~] ['<' '|' ~] ['|' '>' ~]]
|- ^- (list tank)
?@ lum
?>(?=(~ lum) ~)
[[%leaf (trip ((hard ,@) -.lum))] $(lum +.lum)]
::
%wool
:- ~
:+ %rose
[[' ' ~] ['<' '<' ~] ['>' '>' ~]]
|- ^- (list tank)
?@ lum
?>(?=(~ lum) ~)
[(need ^$(q.ham %yarn, lum -.lum)) $(lum +.lum)]
::
%yarn
[~ %leaf '"' (weld (tape lum) `tape`['"' ~])]
::
%void
~
::
[%atom *]
?. ?=(@ lum)
~
:+ ~
%leaf
?: =(%$ p.q.ham) ~(rend co [~ %ud lum])
2013-12-21 06:35:33 +04:00
?: =(%t p.q.ham) ['\'' (weld (rip 3 lum) `tape`['\'' ~])]
2013-12-09 02:40:16 +04:00
?: =(%tas p.q.ham) ['%' ?.(=(0 lum) (rip 3 lum) ['$' ~])]
2013-09-29 00:21:18 +04:00
~(rend co [~ p.q.ham lum])
::
[%core *]
:: XX needs rethinking for core metal
:: ?. ?=(^ lum) ~
:: => .(lum `*`lum)
:: =- ?~(tok ~ [~ %rose [[' ' ~] ['<' ~] ['>' ~]] u.tok])
:: ^= tok
:: |- ^- (unit (list tank))
:: ?~ p.q.ham
2013-09-29 00:21:18 +04:00
:: =+ den=^$(q.ham q.q.ham)
:: ?~(den ~ [~ u.den ~])
:: =+ mur=$(p.q.ham t.p.q.ham, lum +.lum)
:: ?~(mur ~ [~ [[%leaf (rip 3 i.p.q.ham)] u.mur]])
[~ (dial ham)]
::
[%face *]
=+ wal=$(q.ham q.q.ham)
?~ wal
~
[~ %palm [['=' ~] ~ ~ ~] [%leaf (trip p.q.ham)] u.wal ~]
::
[%list *]
?: =(~ lum)
[~ %leaf '~' ~]
=- ?~ tok
~
2013-09-29 00:21:18 +04:00
[~ %rose [[' ' ~] ['~' '[' ~] [']' ~]] u.tok]
^= tok
|- ^- (unit (list tank))
?: ?=(@ lum)
?.(=(~ lum) ~ [~ ~])
=+ [for=^$(q.ham q.q.ham, lum -.lum) aft=$(lum +.lum)]
?. &(?=(^ for) ?=(^ aft))
~
[~ u.for u.aft]
::
[%pick *]
|- ^- (unit tank)
?~ p.q.ham
~
=+ wal=^$(q.ham i.p.q.ham)
?~ wal
$(p.q.ham t.p.q.ham)
wal
::
[%plot *]
=- ?~ tok
~
2013-09-29 00:21:18 +04:00
[~ %rose [[' ' ~] ['[' ~] [']' ~]] u.tok]
^= tok
|- ^- (unit (list tank))
?~ p.q.ham
~
?: ?=([* ~] p.q.ham)
=+ wal=^$(q.ham i.p.q.ham)
?~(wal ~ [~ [u.wal ~]])
?@ lum
~
=+ gim=^$(q.ham i.p.q.ham, lum -.lum)
2013-09-29 00:21:18 +04:00
?~ gim
~
=+ myd=$(p.q.ham t.p.q.ham, lum +.lum)
?~ myd
~
[~ u.gim u.myd]
::
[%pear *]
?. =(lum q.q.ham)
~
=+ fox=~(rend co [~ p.q.ham q.q.ham])
[~ %leaf ?:(=(['~' ~] fox) fox ['%' fox])]
::
[%stop *]
2014-03-05 23:00:27 +04:00
?: (~(has in gil) [p.q.ham lum]) ~
2013-09-29 00:21:18 +04:00
=+ kep=(~(get by p.ham) p.q.ham)
?~ kep
~|([%stop-loss p.q.ham] !!)
2014-03-05 23:00:27 +04:00
$(gil (~(put in gil) [p.q.ham lum]), q.ham u.kep)
2013-09-29 00:21:18 +04:00
::
[%tree *]
=- ?~ tok
~
2013-09-29 00:21:18 +04:00
[~ %rose [[' ' ~] ['{' ~] ['}' ~]] u.tok]
^= tok
=+ tuk=*(list tank)
|- ^- (unit (list tank))
?: =(~ lum)
[~ tuk]
?. ?=([n=* l=* r=*] lum)
~
=+ rol=$(lum r.lum)
?~ rol
~
=+ tim=^$(q.ham q.q.ham, lum n.lum)
?~ tim
~
$(lum l.lum, tuk [u.tim u.rol])
::
[%unit *]
?@ lum
?.(=(~ lum) ~ [~ %leaf '~' ~])
?. =(~ -.lum)
~
=+ wal=$(q.ham q.q.ham, lum +.lum)
?~ wal
~
[~ %rose [[' ' ~] ['[' ~] [']' ~]] [%leaf '~' ~] u.wal ~]
==
::
++ doge
|= ham=calf
=- ?+ woz woz
2013-12-15 10:46:41 +04:00
[%list * [%atom %'ta']] %path
[%list * [%atom %'t']] %wall
[%list * [%atom %'tD']] %yarn
2013-09-29 00:21:18 +04:00
[%list * %yarn] %wool
==
^= woz
^- wine
?. ?=([%stop *] q.ham)
?: ?& ?= [%pick [%pear %n 0] [%plot [%pear %n 0] [%face *] ~] ~]
2013-09-29 00:21:18 +04:00
q.ham
=(1 (met 3 p.i.t.p.i.t.p.q.ham))
==
[%unit =<([p q] i.t.p.i.t.p.q.ham)]
q.ham
=+ may=(~(get by p.ham) p.q.ham)
?~ may
q.ham
?. ?& ?=([%pick *] u.may)
?=(^ p.u.may)
=([%pear %n 0] i.p.u.may)
==
q.ham
?: ?& ?=([[%plot [%face *] [%face * %stop *] ~] ~] t.p.u.may)
=(p.q.ham p.q.i.t.p.i.t.p.u.may)
=(1 (met 3 p.i.p.i.t.p.u.may))
=(1 (met 3 p.i.t.p.i.t.p.u.may))
==
:+ %list
(cat 3 p.i.p.i.t.p.u.may p.i.t.p.i.t.p.u.may)
q.i.p.i.t.p.u.may
2013-12-15 10:27:48 +04:00
?: ?& ?= $: $: %plot
[%face *]
[%face * %stop *]
[[%face * %stop *] ~]
==
~
==
2013-09-29 00:21:18 +04:00
t.p.u.may
=(p.q.ham p.q.i.t.p.i.t.p.u.may)
=(p.q.ham p.q.i.t.t.p.i.t.p.u.may)
=(1 (met 3 p.i.p.i.t.p.u.may))
=(1 (met 3 p.i.t.p.i.t.p.u.may))
=(1 (met 3 p.i.t.t.p.i.t.p.u.may))
==
:+ %tree
%^ cat
3
p.i.p.i.t.p.u.may
2013-09-29 00:21:18 +04:00
(cat 3 p.i.t.p.i.t.p.u.may p.i.t.t.p.i.t.p.u.may)
q.i.p.i.t.p.u.may
q.ham
::
++ dole
^- calf
=+ gil=*(set type)
=+ dex=[p=*(map type ,@) q=*(map ,@ wine)]
=< [q.p q]
|- ^- [p=[p=(map type ,@) q=(map ,@ wine)] q=wine]
=- [p.tez (doge q.p.tez q.tez)]
^= tez
^- [p=[p=(map type ,@) q=(map ,@ wine)] q=wine]
?- sut
%noun [dex sut]
%void [dex sut]
[%atom *] [dex sut]
2014-01-04 06:59:56 +04:00
[%bull *] $(sut q.sut) :: something better here
2013-09-29 00:21:18 +04:00
[%cell *]
=+ hin=$(sut p.sut)
2013-09-29 00:21:18 +04:00
=+ yon=$(dex p.hin, sut q.sut)
:- p.yon
:- %plot
?:(?=([%plot *] q.yon) [q.hin p.q.yon] [q.hin q.yon ~])
::
[%core *]
=+ yad=$(sut p.sut)
:- p.yad
=+ ^= doy ^- [p=(list ,@ta) q=wine]
?: ?=([%core *] q.yad)
[p.q.yad q.q.yad]
[~ q.yad]
:- %core
:_ q.doy
:_ p.doy
%^ cat 3
%~ rent co
:+ ~ %ud
|- ^- @
?- q.r.q.sut
~ 0
[* ~ ~] 1
[* ~ *] +($(q.r.q.sut r.q.r.q.sut))
[* * ~] +($(q.r.q.sut l.q.r.q.sut))
[* * *] .+ %+ add
$(q.r.q.sut l.q.r.q.sut)
2013-09-29 00:21:18 +04:00
$(q.r.q.sut r.q.r.q.sut)
==
%^ cat 3
?-(p.q.sut %gold '.', %iron '|', %lead '?', %zinc '&')
=+ gum=(mug q.r.q.sut)
%+ can 3
:~ [1 (add 'a' (mod gum 26))]
[1 (add 'a' (mod (div gum 26) 26))]
[1 (add 'a' (mod (div gum 676) 26))]
==
::
[%cube *]
?. ?=(@ p.sut)
$(sut repo)
=+ pum=$(sut q.sut)
?> ?=([%atom *] q.pum)
[p.pum [%pear p.q.pum p.sut]]
::
[%face *]
2013-09-29 00:21:18 +04:00
=+ yad=$(sut q.sut)
[p.yad [%face p.sut q.yad]]
::
[%fork *]
=+ hin=$(sut p.sut)
=+ yon=$(dex p.hin, sut q.sut)
:- p.yon
?: =(%void q.hin)
q.yon
?: |(=(%void q.yon) =(q.hin q.yon))
q.hin
:- %pick
?. ?=([%pick *] q.yon)
[q.hin q.yon ~]
?> ?=(^ p.q.yon)
?:(=(q.hin i.p.q.yon) p.q.yon [q.hin p.q.yon])
::
[%hold *]
=+ hey=(~(get by p.dex) sut)
?^ hey
[dex [%stop u.hey]]
?: (~(has in gil) sut)
=+ dyr=~(wyt by p.dex)
[[(~(put by p.dex) sut dyr) q.dex] [%stop dyr]]
=+ rom=$(gil (~(put in gil) sut), sut repo)
=+ rey=(~(get by p.p.rom) sut)
?~ rey
rom
[[p.p.rom (~(put by q.p.rom) u.rey q.rom)] [%stop u.rey]]
==
::
++ duck ^-(tank (dial dole))
2013-12-05 02:30:09 +04:00
++ dune |.(duck)
2013-09-29 00:21:18 +04:00
++ dunk
|= paz=term ^- tank
:+ %palm
[['.' ~] ['-' ~] ~ ~]
[[%leaf (mesc (trip paz))] duck ~]
::
2013-12-31 23:30:37 +04:00
++ fino
2014-01-04 06:59:56 +04:00
|= [dep=@ud way=?(%read %rite %both %free) cog=term]
2013-09-29 00:21:18 +04:00
=+ gil=*(set type)
2013-12-31 23:30:37 +04:00
|- ^- [p=@ud q=(unit post)]
2013-09-29 00:21:18 +04:00
?+ sut [dep ~]
2013-12-26 21:12:07 +04:00
[%bull *]
?. =(cog p.p.sut)
2014-01-02 00:47:18 +04:00
$(sut q.sut)
2013-12-26 21:12:07 +04:00
?. ?=(0 dep)
2014-01-02 00:47:18 +04:00
$(dep (dec dep), sut q.sut)
2013-12-31 23:30:37 +04:00
[0 ~ 1 %2 p.sut q.sut]
2013-12-26 21:12:07 +04:00
::
2013-09-29 00:21:18 +04:00
[%cell *]
=+ taf=$(sut p.sut)
?~ q.taf
=+ bov=$(dep p.taf, sut q.sut)
?~ q.bov
bov
[p.bov ~ (peg 3 p.u.q.bov) q.u.q.bov]
[p.taf ~ (peg 2 p.u.q.taf) q.u.q.taf]
::
[%core *]
=+ zem=(look cog q.r.q.sut)
=> ^+(. ?:(|(=(~ zem) =(0 dep)) . .(dep (dec dep), zem ~)))
?^ zem
2013-12-31 23:30:37 +04:00
[dep ~ 1 [%1 (peg 2 p.u.zem) [[sut(p.q %gold) q.u.zem] ~]]]
2013-09-29 00:21:18 +04:00
=+ taf=$(sut p.sut)
?~ q.taf
taf
2013-09-29 00:21:18 +04:00
?. (park way p.u.q.taf)
~|(%find-park !!)
[p.taf ~ (peg 3 p.u.q.taf) q.u.q.taf]
::
[%cube *]
$(sut repo)
::
[%face *]
?: =(cog p.sut)
?. ?=(0 dep)
[(dec dep) ~]
2013-12-31 23:30:37 +04:00
[0 ~ 1 %0 q.sut]
2013-09-29 00:21:18 +04:00
[dep ~]
::
[%fork *]
~| %fork
?: (~(has in gil) q.sut)
$(sut p.sut)
?: (~(has in gil) p.sut)
$(sut q.sut)
=+ [hax=$(sut p.sut) yor=$(sut q.sut)]
~| %find-fork
?: =(hax yor)
hax
2013-12-31 23:30:37 +04:00
?> &(?=(^ q.hax) ?=(^ q.yor) =(p.hax p.yor) =(p.u.q.hax p.u.q.yor))
:- p.hax
?- -.q.u.q.hax
0 ?> ?=(0 -.q.u.q.yor)
[~ p.u.q.hax %0 (fork p.q.u.q.hax p.q.u.q.yor)]
1 ?> &(?=(1 -.q.u.q.yor) =(p.q.u.q.yor p.q.u.q.hax))
[~ p.u.q.hax %1 p.q.u.q.hax (weld q.q.u.q.hax q.q.u.q.yor)]
2 ?> ?& ?=(2 -.q.u.q.yor)
2013-12-31 23:30:37 +04:00
=(p.p.q.u.q.hax p.p.q.u.q.yor)
=(q.p.q.u.q.hax q.p.q.u.q.yor)
2014-01-02 00:47:18 +04:00
=(r.p.q.u.q.hax r.p.q.u.q.yor)
2013-12-31 23:30:37 +04:00
==
:* ~
p.u.q.hax
%2
:* p.p.q.u.q.hax
q.p.q.u.q.hax
r.p.q.u.q.hax
2014-01-02 00:47:18 +04:00
(fork s.p.q.u.q.hax s.p.q.u.q.yor)
==
2013-12-31 23:30:37 +04:00
(fork q.q.u.q.hax q.q.u.q.yor)
==
2013-09-29 00:21:18 +04:00
==
::
[%hold *]
?: (~(has in gil) sut)
[dep ~]
$(gil (~(put in gil) sut), sut repo)
==
::
++ fink
~/ %fink
2014-01-04 06:59:56 +04:00
|= [dep=@ud way=?(%read %rite %both %free) cog=term]
2013-09-29 00:21:18 +04:00
^- port
2014-02-11 09:34:24 +04:00
:: ~_ (dunk 'type')
2014-01-05 02:57:44 +04:00
~_ (show [%c 'find-limb'] ?:(=(%$ cog) '$' [%a cog]))
2013-12-31 23:30:37 +04:00
=+ hoq=(fino dep way cog)
?~ q.hoq
~|(%find-none !!)
(flee u.q.hoq)
::
++ finq
2014-01-04 06:59:56 +04:00
|= [dep=@ud way=?(%read %rite %both %free) cog=term]
2013-12-31 23:30:37 +04:00
^- post
2014-01-05 02:57:44 +04:00
:: ~_ (dunk 'type')
~_ (show [%c 'find-limb'] ?:(=(%$ cog) '$' [%a cog]))
2013-12-31 23:30:37 +04:00
=+ hoq=(fino dep way cog)
2013-09-29 00:21:18 +04:00
?~ q.hoq
~|(%find-none !!)
u.q.hoq
::
++ fire
~/ %fire
|= hag=(list ,[p=type q=foot])
^- type
?: ?=([[* [%elm ~ 1]] ~] hag)
p.i.hag
:- %hold
%+ turn
hag.$
|= [p=type q=foot]
?. ?=([%core *] p)
~|(%fire-core !!)
=+ dox=[%core q.q.p q.p]
?: ?=(%ash -.q)
~| %fire-ash
2014-01-05 02:57:44 +04:00
:: ~_ (dunk(sut [%cell q.q.p p.p]) %fire-dry)
2013-09-29 00:21:18 +04:00
?> ?|(!vet (nest(sut q.q.p) & p.p))
[dox p.q]
~| [%fire-odd -.q]
?> ?=(%elm -.q)
~| %fire-elm
2014-01-05 02:57:44 +04:00
:: ~_ (dunk(sut [%cell q.q.p p.p]) %fire-wet)
?> ?| !vet
2013-09-29 00:21:18 +04:00
(~(has in rib) [sut dox p.q])
(mull(sut p, rib (~(put in rib) [sut dox p.q])) %noun dox p.q)
==
[p p.q]
::
++ firm
~/ %firm
|= dib=*
=+ bix=*(set ,[type *])
|- ^- ?
?- sut
[%atom *] !.?(dib)
2014-01-04 06:59:56 +04:00
[%bull *] &($(sut q.sut) $(sut s.p.sut, dib .*(dib [0 r.p.sut])))
2013-09-29 00:21:18 +04:00
[%cell *] &(.?(dib) $(sut p.sut, dib -.dib) $(sut q.sut, dib +.dib))
[%core *]
2013-09-29 00:21:18 +04:00
?& .?(dib)
$(sut p.sut, dib -.dib)
=(+.dib ?:(=(~ p.r.q.sut) ~|(%firm-core !!) p.r.q.sut))
==
::
[%cube *] =(dib p.sut)
[%face *] $(sut q.sut)
[%fork *] |($(sut p.sut) $(sut q.sut))
[%hold *]
?| (~(has in bix) [sut dib])
2013-09-29 00:21:18 +04:00
$(bix (~(put in bix) [sut dib]), sut repo)
==
::
%noun &
%void |
==
2013-09-29 00:21:18 +04:00
::
++ fish
~/ %fish
|= axe=axis
=+ vot=*(set type)
2013-12-26 21:12:07 +04:00
|- ^- nock
2013-09-29 00:21:18 +04:00
?- sut
%void [%1 1]
%noun [%1 0]
2013-12-26 21:12:07 +04:00
[%atom *] (flip [%3 %0 axe])
2014-01-04 06:59:56 +04:00
[%bull *] ~|(%bull-fish !!)
2013-09-29 00:21:18 +04:00
[%cell *]
%+ flan
[%3 %0 axe]
(flan $(sut p.sut, axe (peg axe 2)) $(sut q.sut, axe (peg axe 3)))
::
[%core *] [%0 0]
[%cube *] [%5 [%1 p.sut] [%0 axe]]
[%face *] $(sut q.sut)
[%fork *] (flor $(sut p.sut) $(sut q.sut))
[%hold *]
?: (~(has in vot) sut)
[%0 0]
=> %=(. vot (~(put in vot) sut))
$(sut repo)
==
::
++ fuse
~/ %fuse
|= ref=type
=+ bix=*(set ,[type type])
|- ^- type
?: ?|(=(sut ref) =(%noun ref))
sut
?- sut
[%atom *]
2013-09-29 00:21:18 +04:00
?- ref
[%atom *] ?:((fitz p.ref p.sut) sut ref)
[%cell *] %void
* $(sut ref, ref sut)
==
2014-01-04 06:59:56 +04:00
[%bull *] (bull p.sut $(sut q.sut))
[%cell *]
2013-09-29 00:21:18 +04:00
?- ref
[%cell *] (cell $(sut p.sut, ref p.ref) $(sut q.sut, ref q.ref))
* $(sut ref, ref sut)
==
::
[%core *] $(sut repo)
[%cube *]
=+ foz=$(sut q.sut)
?: (firm(sut foz) p.sut)
(cube p.sut foz)
%void
::
[%face *] (face p.sut $(sut q.sut))
[%fork *] (fork $(sut p.sut) $(sut q.sut))
[%hold *]
?: (~(has in bix) [sut ref])
~|(%fuse-loop !!)
(reco |=(a=type ^$(sut a, bix (~(put in bix) [sut ref]))))
::
%noun ref
%void %void
==
::
++ gain
~/ %gain
2013-12-15 11:07:57 +04:00
|= gen=twig ^- type
2013-09-29 00:21:18 +04:00
(chip & gen)
::
++ hang
~/ %hang
|= [dab=(map term foot) rud=(map term foot)]
^- (map term foot)
=+ goy=(~(tap by rud) ~)
=+ waf=dab
|- ^+ dab
?@ goy
waf
~| [%hang-on p.i.goy]
=+ yeq=(~(get by dab) p.i.goy)
?< ?=(~ yeq)
?- -.u.yeq
%ash
2013-09-29 00:21:18 +04:00
?> ?=([%ash *] q.i.goy)
$(goy t.goy, waf (~(put by waf) p.i.goy q.i.goy))
::
%elm
~|([%hang-elm p.i.goy] !!)
::
%oak
?> ?=([%yew *] q.i.goy)
$(goy t.goy, waf (~(put by waf) p.i.goy q.i.goy))
::
%yew
?> ?=([%yew *] q.i.goy)
%= $
goy t.goy
waf
%+ ~(put by waf)
p.i.goy
[%yew ^$(dab p.u.yeq, rud p.q.i.goy)]
==
==
2013-09-29 00:21:18 +04:00
::
++ harp
|= dab=(map term foot)
^- ?(~ ^)
?: ?=(~ dab)
~
=+ ^= vad
?+ -.q.n.dab !!
%ash q:(mint %noun p.q.n.dab)
%elm q:(mint(vet |) %noun p.q.n.dab)
==
?- dab
[* ~ ~] vad
[* ~ *] [vad $(dab r.dab)]
[* * ~] [vad $(dab l.dab)]
[* * *] [vad $(dab l.dab) $(dab r.dab)]
2013-09-29 00:21:18 +04:00
==
::
++ lose
~/ %lose
2013-12-15 11:07:57 +04:00
|= gen=twig ^- type
2013-09-29 00:21:18 +04:00
(chip | gen)
::
++ chip
~/ %chip
2013-12-15 11:07:57 +04:00
|= [way=? gen=twig] ^- type
2014-01-01 10:48:21 +04:00
?: ?=([%wtts *] gen)
(cool way q.gen (play ~(bunt al p.gen)))
2013-09-29 00:21:18 +04:00
?: ?&(way ?=([%wtpm *] gen))
2013-12-31 23:30:37 +04:00
|-(?~(p.gen sut $(p.gen t.p.gen, sut ^$(gen i.p.gen))))
2013-09-29 00:21:18 +04:00
?: ?&(!way ?=([%wtbr *] gen))
2013-12-31 23:30:37 +04:00
|-(?~(p.gen sut $(p.gen t.p.gen, sut ^$(gen i.p.gen))))
2013-09-29 00:21:18 +04:00
=+ neg=~(open ap gen)
?:(=(neg gen) sut $(gen neg))
::
++ heal
~/ %heal
|= [qog=(unit term) axe=axis ref=type]
^- type
?: =(1 axe)
2013-12-26 21:12:07 +04:00
?~ qog
2013-09-29 00:21:18 +04:00
ref
|- ^- type
?- sut
2014-02-11 09:34:24 +04:00
[%bull *] ~& %heal-bull
?: =(u.qog p.p.sut)
ref
(busk(sut $(sut q.sut)) p.p.sut q.p.sut)
2013-09-29 00:21:18 +04:00
[%core *] ref
[%face *] ?.(=(u.qog p.sut) ~|('heal-name' !!) (face p.sut ref))
[%fork *] (fork $(sut p.sut) $(sut q.sut))
[%hold *] $(sut repo)
* ~|([%name u.qog] ~|('heal-name' !!))
==
=+ [now=(cap axe) lat=(mas axe)]
=+ gil=*(set type)
2013-09-29 00:21:18 +04:00
|- ^- type
?- sut
[%atom *] %void
2014-01-04 06:59:56 +04:00
[%bull *] (busk(sut $(sut q.sut)) p.p.sut q.p.sut)
2013-09-29 00:21:18 +04:00
[%cell *]
?: =(2 now)
(cell ^$(sut p.sut, axe lat) q.sut)
(cell p.sut ^$(sut q.sut, axe lat))
::
[%core *]
?. =(3 now)
2013-09-29 00:21:18 +04:00
~|(%heal-core !!)
(core ^$(sut p.sut, axe lat) q.sut)
::
2014-04-03 05:06:45 +04:00
[%face *] (face p.sut $(sut q.sut))
2013-09-29 00:21:18 +04:00
[%fork *] (fork $(sut p.sut) $(sut q.sut))
[%hold *]
2013-09-29 00:21:18 +04:00
?:((~(has in gil) sut) %void $(gil (~(put in gil) sut), sut repo))
::
* $(sut repo)
==
::
++ mint
~/ %mint
2013-12-15 11:07:57 +04:00
|= [gol=type gen=twig]
^- [p=type q=nock]
|^ ^- [p=type q=nock]
2013-09-29 00:21:18 +04:00
?: ?&(=(%void sut) !?=([%zpcb *] gen))
?. |(!vet ?=([%zpfs *] gen) ?=([%zpzp *] gen))
~|(%mint-vain !!)
[%void %0 0]
?- gen
::
[^ *]
=+ hed=$(gen p.gen, gol %noun)
=+ tal=$(gen q.gen, gol %noun)
[(nice (cell p.hed p.tal)) (cons q.hed q.tal)]
::
2014-01-04 11:28:16 +04:00
[%bcpt *] $(gen (~(whip al q.gen) p:(seep %read p.gen)))
2013-09-29 00:21:18 +04:00
[%brcn *] (grow %gold [~ 1] p.gen)
::
[%cnts *]
=+ lar=(foil (seek %read p.gen))
2013-12-15 12:23:23 +04:00
=+ mew=(snub q.gen)
=- [(nice p.yom) ?:(=(0 p.q.lar) q.yom [%9 p.q.lar q.yom])]
^= yom
=+ hej=*(list ,[p=axis q=nock])
|- ^- [p=type q=nock]
2013-12-16 03:40:44 +04:00
?~ mew
2013-12-15 12:23:23 +04:00
[(fire q.q.lar) (hike p.lar hej)]
=+ zil=^$(gen q.i.mew, gol %noun)
=+ wip=(tock p.i.mew p.zil q.q.lar)
$(mew t.mew, q.q.lar q.wip, hej [[p.wip q.zil] hej])
2013-09-29 00:21:18 +04:00
::
[%dtkt *] [(nice %noun) [%11 q:$(gen p.gen, gol %noun)]]
[%dtls *] [(nice [%atom %$]) [%4 q:$(gen p.gen, gol [%atom %$])]]
2014-01-05 07:56:33 +04:00
[%dtzy *] [(nice (play gen)) [%1 q.gen]]
[%dtzz *] [(nice (play gen)) [%1 q.gen]]
2013-09-29 00:21:18 +04:00
[%dttr *]
[(nice %noun) [%2 q:$(gen p.gen, gol %noun) q:$(gen q.gen, gol %noun)]]
::
[%dtts *]
[(nice bean) [%5 q:$(gen p.gen, gol %noun) q:$(gen q.gen, gol %noun)]]
::
[%dtwt *] [(nice bean) [%3 q:$(gen p.gen, gol %noun)]]
[%ktbr *] =+(vat=$(gen p.gen) [(wrap(sut p.vat) %iron) q.vat])
[%ktls *]
2013-09-29 00:21:18 +04:00
=+(hif=(nice (play p.gen)) [hif q:$(gen q.gen, gol hif)])
::
[%ktpm *] =+(vat=$(gen p.gen) [(wrap(sut p.vat) %zinc) q.vat])
[%ktsg *]
=+ nef=$(gen p.gen)
=+ moc=(mink [burn q.nef] |=(* ~))
[p.nef ?:(?=(0 -.moc) [%1 p.moc] q.nef)]
::
2013-12-21 05:02:26 +04:00
[%ktts *] =+(vat=$(gen q.gen) [(conk(sut p.vat) p.gen) q.vat])
2013-09-29 00:21:18 +04:00
[%ktwt *] =+(vat=$(gen p.gen) [(wrap(sut p.vat) %lead) q.vat])
2014-01-05 02:57:44 +04:00
[%sgzp *] ~_(duck(sut (play p.gen)) $(gen q.gen))
2013-09-29 00:21:18 +04:00
[%sggr *]
=+ hum=$(gen q.gen)
:- p.hum
:+ %10
?- p.gen
@ p.gen
^ [p.p.gen q:$(gen q.p.gen, gol %noun)]
==
q.hum
::
[%tsgr *]
=+ fid=$(gen p.gen, gol %noun)
=+ dov=$(sut p.fid, gen q.gen)
[p.dov (comb q.fid q.dov)]
2013-12-26 21:12:07 +04:00
::
[%tstr *]
2014-01-04 06:59:56 +04:00
$(gen r.gen, sut (busk p.gen q.gen))
2013-09-29 00:21:18 +04:00
::
[%wtcl *]
=+ nor=$(gen p.gen, gol bean)
=+ fex=(gain p.gen)
=+ wux=(lose p.gen)
=+ ^= duy
?: =(%void fex)
?:(=(%void wux) [%0 0] [%1 1])
?:(=(%void wux) [%1 0] q.nor)
=+ hiq=$(sut fex, gen q.gen)
=+ ran=$(sut wux, gen r.gen)
[(fork p.hiq p.ran) (cond duy q.hiq q.ran)]
::
2013-12-27 06:43:25 +04:00
[%wtts *]
:- (nice bean)
%- fish(sut (play ~(bunt al p.gen)))
2014-01-05 07:18:06 +04:00
(cove q:$(gen [%cnzz q.gen], gol %noun))
2013-09-29 00:21:18 +04:00
::
[%zpcb *]
2014-01-05 02:57:44 +04:00
~_ (show %o p.gen)
2013-09-29 00:21:18 +04:00
=+ hum=$(gen q.gen)
[p.hum [%10 [%spot %1 p.gen] q.hum]]
::
2014-01-27 22:49:26 +04:00
[%zpcm *] [(nice (play p.gen)) [%1 q.gen]] :: XX validate!
2013-09-29 00:21:18 +04:00
[%zpcn ~] =+(pet=seed [(nice p.pet) [%1 q.pet]])
[%zpfs *]
?: vet
2014-01-05 02:57:44 +04:00
~_ (dunk(sut (play p.gen)) 'lost')
2013-09-29 00:21:18 +04:00
~|(%mint-lost !!)
[%void [%0 0]]
::
[%zpsm *]
=+ vos=$(gol %noun, gen q.gen) :: XX validate!
2014-01-05 06:05:33 +04:00
:: [(nice (cell (sift (play p.gen)) p.vos)) (cons [%1 p.vos] q.vos)]
2013-09-29 00:21:18 +04:00
[(nice (cell (play p.gen) p.vos)) (cons [%1 p.vos] q.vos)]
::
[%zpts *] [(nice %noun) [%1 q:$(vet |, gen p.gen)]]
[%zpzp ~] [%void [%0 0]]
*
=+ doz=~(open ap gen)
2013-09-29 00:21:18 +04:00
?: =(doz gen)
2014-01-05 02:57:44 +04:00
~_ (show [%c 'hoon'] [%q gen])
2013-09-29 00:21:18 +04:00
~|(%mint-open !!)
$(gen doz)
==
::
++ nice
|= typ=type
~| %mint-nice
?> ?|(!vet (nest(sut gol) & typ))
typ
::
++ grow
2013-12-15 11:07:57 +04:00
|= [mel=?(%gold %iron %lead %zinc) ruf=twig dab=(map term foot)]
^- [p=type q=nock]
2013-09-29 00:21:18 +04:00
=+ dan=^$(gen ruf, gol %noun)
=+ toc=(core p.dan [%gold p.dan [~ dab]])
=+ dez=(harp(sut toc) dab)
:- (nice (core p.dan mel p.dan [dez dab]))
(cons [%1 dez] q.dan)
--
::
++ moot
=+ gil=*(set type)
|- ^- ?
?- sut
[%atom *] |
2013-12-26 21:12:07 +04:00
[%bull *] $(sut q.sut)
2013-09-29 00:21:18 +04:00
[%cell *] |($(sut p.sut) $(sut q.sut))
[%core *] $(sut p.sut)
[%cube *] |
[%face *] $(sut q.sut)
[%fork *] &($(sut p.sut) $(sut q.sut))
[%hold *] |((~(has in gil) sut) $(gil (~(put in gil) sut), sut repo))
%noun |
%void &
==
::
++ mull
~/ %mull
2013-12-15 11:07:57 +04:00
|= [gol=type dox=type gen=twig]
2013-09-29 00:21:18 +04:00
^- ?
?. vet
&
=< &
|^ ^- [p=type q=type]
?: =(%void sut)
~|(%mull-none !!)
?- gen
::
[^ *]
=+ hed=$(gen p.gen, gol %noun)
=+ tal=$(gen q.gen, gol %noun)
[(nice (cell p.hed p.tal)) (cell q.hed q.tal)]
2014-01-04 11:28:16 +04:00
::
[%bcpt *]
=+ sep=(seep %read p.gen)
=+ pox=(seep(sut dox) %read p.gen)
?. =(p.pox p.sep) ~|(%mull-bonk-wing !!)
$(gen (~(whip al q.gen) p.sep))
2013-09-29 00:21:18 +04:00
::
[%brcn *] (grow %gold [~ 1] p.gen)
[%cnts *]
2013-09-29 00:21:18 +04:00
=+ lar=(foil (seek %read p.gen))
=+ vug=(foil (seek(sut dox) %read p.gen))
2013-12-15 12:23:23 +04:00
?. &(=(p.lar p.vug) =(p.q.lar p.q.vug))
~|(%mull-bonk-e !!)
=+ mew=(snub q.gen)
=- [(nice (fire p.yom)) (fire(vet |) q.yom)]
^= yom
|- ^- [p=(list ,[p=type q=foot]) q=(list ,[p=type q=foot])]
?@ mew
[q.q.lar q.q.vug]
=+ zil=^$(gen q.i.mew, gol %noun)
=+ cuf=(tock p.i.mew p.zil q.q.lar)
=+ dof=(tock p.i.mew q.zil q.q.vug)
?. .=(p.cuf p.dof)
~|(%mull-bonk-f !!)
$(mew t.mew, q.q.lar q.cuf, q.q.vug q.dof)
2013-09-29 00:21:18 +04:00
::
[%dtkt *] =+($(gen p.gen, gol %noun) (both %noun))
[%dtls *] =+($(gen p.gen, gol [%atom %$]) (both [%atom %$]))
2014-01-05 07:56:33 +04:00
[%dtzy *] (both (play gen))
[%dtzz *] (both (play gen))
[%dttr *]
2013-09-29 00:21:18 +04:00
=+([$(gen p.gen, gol %noun) $(gen q.gen, gol %noun)] (both %noun))
::
[%dtts *]
2013-09-29 00:21:18 +04:00
=+([$(gen p.gen, gol %noun) $(gen q.gen, gol %noun)] (both bean))
::
[%dtwt *] =+($(gen p.gen, gol %noun) (both bean)) :: XX =|
[%ktbr *]
2013-09-29 00:21:18 +04:00
=+(vat=$(gen p.gen) [(wrap(sut p.vat) %iron) (wrap(sut q.vat) %iron)])
::
[%ktls *]
=+ hif=[p=(nice (play p.gen)) q=(play(sut dox) p.gen)]
=+($(gen q.gen, gol p.hif) hif)
::
[%ktpm *]
2013-09-29 00:21:18 +04:00
=+(vat=$(gen p.gen) [(wrap(sut p.vat) %zinc) (wrap(sut q.vat) %zinc)])
::
[%ktts *]
2013-12-21 05:02:26 +04:00
=+(vat=$(gen q.gen) [(conk(sut p.vat) p.gen) (conk(sut q.vat) p.gen)])
2013-09-29 00:21:18 +04:00
::
[%ktwt *]
2013-09-29 00:21:18 +04:00
=+(vat=$(gen p.gen) [(wrap(sut p.vat) %lead) (wrap(sut q.vat) %lead)])
::
[%ktsg *] $(gen p.gen)
2014-01-05 02:57:44 +04:00
[%sgzp *] ~_(duck(sut (play p.gen)) $(gen q.gen))
2013-09-29 00:21:18 +04:00
[%sggr *] $(gen q.gen)
[%tsgr *]
2013-09-29 00:21:18 +04:00
=+ lem=$(gen p.gen, gol %noun)
$(gen q.gen, sut p.lem, dox q.lem)
2013-12-26 21:12:07 +04:00
::
[%tstr *]
%= $
gen r.gen
2014-01-04 06:59:56 +04:00
sut (busk p.gen q.gen)
dox (busk(sut dox) p.gen q.gen)
2013-12-26 21:12:07 +04:00
==
2013-09-29 00:21:18 +04:00
::
[%wtcl *]
=+ nor=$(gen p.gen, gol bean)
=+ ^= hiq ^- [p=type q=type]
=+ fex=[p=(gain p.gen) q=(gain(sut dox) p.gen)]
?: =(%void p.fex)
[%void ?:(=(%void q.fex) %void ~|(%wtcl-z (play(sut q.fex) q.gen)))]
?: =(%void q.fex)
~|(%mull-bonk-b !!)
$(sut p.fex, dox q.fex, gen q.gen)
=+ ^= ran ^- [p=type q=type]
=+ wux=[p=(lose p.gen) q=(lose(sut dox) p.gen)]
?: =(%void p.wux)
[%void ?:(=(%void q.wux) %void ~|(%wtcl-a (play(sut q.wux) r.gen)))]
?: =(%void q.wux)
~|(%mull-bonk-c !!)
$(sut p.wux, dox q.wux, gen r.gen)
[(nice (fork p.hiq p.ran)) (fork q.hiq q.ran)]
::
2013-12-27 06:43:25 +04:00
[%wtts *]
=+ nob=~(bunt al p.gen)
=+ waz=[p=(play nob) q=(play(sut dox) nob)]
2014-01-05 07:18:06 +04:00
=+ ^= syx :- p=(cove q:(mint %noun [%cnzz q.gen]))
q=(cove q:(mint(sut dox) %noun [%cnzz q.gen]))
2013-09-29 00:21:18 +04:00
=+ pov=[p=(fish(sut p.waz) p.syx) q=(fish(sut q.waz) q.syx)]
?. &(=(p.syx q.syx) =(p.pov q.pov))
~|(%mull-bonk-a !!)
(both bean)
::
2014-01-05 02:57:44 +04:00
[%zpcb *] ~_((show %o p.gen) $(gen q.gen))
2013-09-29 00:21:18 +04:00
[%zpcm *] [(nice (play p.gen)) (play(sut dox) p.gen)]
[%zpcn ~] =+(pet=seed [(nice p.pet) p.pet])
[%zpfs *]
?: vet
2014-01-05 02:57:44 +04:00
:: ~_ (dunk(sut (play p.gen)) 'also')
2013-09-29 00:21:18 +04:00
~|(%mull-skip !!)
(both %void)
::
[%zpts *] (both %noun)
[%zpsm *]
=+ vos=$(gol %noun, gen q.gen) :: XX validate!
[(nice (cell (play p.gen) p.vos)) (cell (play(sut dox) p.gen) q.vos)]
::
[%zpzp ~] (both %void)
*
=+ doz=~(open ap gen)
2013-09-29 00:21:18 +04:00
?: =(doz gen)
2014-01-05 02:57:44 +04:00
~_ (show [%c 'hoon'] [%q gen])
2013-09-29 00:21:18 +04:00
~|(%mull-open !!)
$(gen doz)
==
::
++ both
|= typ=type
[(nice typ) typ]
::
++ nice
|= typ=type
2014-01-05 02:57:44 +04:00
:: ~_ (dunk(sut gol) 'need')
:: ~_ (dunk(sut typ) 'have')
2013-09-29 00:21:18 +04:00
~| %mull-nice
?> ?|(!vet (nest(sut gol) & typ))
typ
::
++ grow
2013-12-15 11:07:57 +04:00
|= [mel=?(%gold %iron %lead %zinc) ruf=twig dab=(map term foot)]
2013-09-29 00:21:18 +04:00
~| %mull-grow
^- [p=type q=type]
=+ dan=^$(gen ruf, gol %noun)
=+ ^= toc :- p=(core p.dan [%gold p.dan [~ dab]])
q=(core q.dan [%gold q.dan [~ dab]])
=+ (bake(sut p.toc, dox q.toc) dab)
:- (nice (core p.dan mel p.dan [[%0 0] dab]))
(core q.dan [mel q.dan [[%0 0] dab]])
::
++ bake
|= dab=(map term foot)
^- *
?: ?=(~ dab)
~
=+ ^= vad
?+ -.q.n.dab !!
%ash ^$(gol %noun, gen p.q.n.dab)
%elm ~
==
?- dab
[* ~ ~] vad
[* ~ *] [vad $(dab r.dab)]
[* * ~] [vad $(dab l.dab)]
[* * *] [vad $(dab l.dab) $(dab r.dab)]
2013-09-29 00:21:18 +04:00
==
--
::
++ meet |=(ref=type &((nest | ref) (nest(sut ref) | sut)))
++ nest
~/ %nest
|= [tel=? ref=type]
^- ?
=+ gil=*(set ,[p=type q=type])
=< dext
|%
++ cong
^- ?
?> ?&(?=([%core *] sut) ?=([%core *] ref))
?: =(q.sut q.ref)
dext(sut p.sut, ref p.ref)
?. ?& dext(sut q.q.sut, ref p.sut)
dext(sut p.sut, ref q.q.sut)
dext(sut q.q.ref, ref p.ref)
2013-09-29 00:21:18 +04:00
==
|
?&
?|(=(p.q.sut p.q.ref) =(%gold p.q.ref))
::
?| (~(has in gil) [sut ref])
%+ %= cram
gil (~(put in gil) [sut ref])
sut sut(p q.q.sut)
ref ref(p q.q.ref)
==
q.r.q.sut
q.r.q.ref
==
2013-09-29 00:21:18 +04:00
::
?- p.q.sut
%gold
=+ pac=[s=q.q.sut r=q.q.ref]
?& dext(sut s.pac, ref r.pac)
dext(sut r.pac, ref s.pac)
==
::
%iron
=+ sam=[s=(peek(sut q.q.sut) %rite 2) r=(peek(sut q.q.ref) %rite 2)]
dext(sut r.sam, ref s.sam)
::
%lead &
%zinc
=+ pal=[s=(peek(sut q.q.sut) %read 2) r=(peek(sut q.q.ref) %read 2)]
dext(sut s.pal, ref r.pal)
==
==
::
++ cram
|= [dab=(map term foot) hem=(map term foot)]
^- ?
?- dab
~ =(hem ~)
^
?& ?=(^ hem)
2013-09-29 00:21:18 +04:00
=(p.n.dab p.n.hem)
$(dab l.dab, hem l.hem)
$(dab r.dab, hem r.hem)
?- -.q.n.dab
%ash
?& ?=(%ash -.q.n.hem)
2013-09-29 00:21:18 +04:00
dext(sut (play p.q.n.dab), ref (play(sut ref) p.q.n.hem))
==
%elm =(q.n.dab q.n.hem)
%oak ?=(?(%oak %yew) -.q.n.hem)
%yew
2013-09-29 00:21:18 +04:00
?& ?=(%yew -.q.n.hem)
$(dab p.q.n.dab, hem p.q.n.hem)
==
==
==
==
::
++ dext
^- ?
=- ?: tyn
&
?: tel
2014-01-05 02:57:44 +04:00
:: ~_ (dunk %need)
:: ~_ (dunk(sut ref) %have)
2013-09-29 00:21:18 +04:00
~|(%type-fail !!)
|
^= tyn
?: =(sut ref)
&
?- sut
%void sint
%noun &
::
[%atom *]
2013-09-29 00:21:18 +04:00
?. ?=([%atom *] ref)
sint
(fitz p.sut p.ref)
::
[%cell *]
?. ?=([%cell *] ref)
sint
?&
dext(sut p.sut, ref p.ref)
dext(sut q.sut, ref q.ref)
==
::
[%core *]
?. ?=([%core *] ref)
2013-09-29 00:21:18 +04:00
sint
cong
::
[%cube *]
2013-09-29 00:21:18 +04:00
?: ?=([%cube *] ref)
=(p.sut p.ref)
sint
::
[%bull *]
?& dext(sut q.sut)
2014-01-04 06:59:56 +04:00
dext(sut s.p.sut, ref (peek(sut ref) %free r.p.sut))
==
2013-09-29 00:21:18 +04:00
[%face *] dext(sut q.sut)
[%fork *]
?. ?=(?([%atom *] %noun [%cell *] [%cube *] [%core *]) ref)
sint
?|(dext(tel |, sut p.sut) dext(tel |, sut q.sut))
::
[%hold *]
?|
(~(has in gil) [sut ref])
dext(gil (~(put in gil) [sut ref]), sut repo)
==
==
::
++ sint
^- ?
?- ref
[%atom *] |
[%cell *] |
[%fork *] ?&(dext(ref p.ref) dext(ref q.ref))
[%hold *]
?|
(~(has in gil) [sut ref])
dext(gil (~(put in gil) [sut ref]), ref repo(sut ref))
==
::
%noun |
%void &
* dext(ref repo(sut ref))
==
--
::
++ park
~/ %park
2014-01-04 06:59:56 +04:00
|= [way=?(%read %rite %both %free) axe=axis]
2013-09-29 00:21:18 +04:00
^- ?
?> ?=([%core *] sut)
?|
2013-09-29 00:21:18 +04:00
!vet
?- way
2013-12-18 05:47:20 +04:00
%both =(%gold p.q.sut)
2014-01-04 06:59:56 +04:00
%free &
2013-09-29 00:21:18 +04:00
%read
?- p.q.sut
%gold &
%iron |
2013-09-29 00:21:18 +04:00
%lead |
%zinc =(2 (cap axe))
==
::
%rite
?- p.q.sut
%gold &
%iron =(2 (cap axe))
%lead |
%zinc |
2013-09-29 00:21:18 +04:00
==
==
==
::
++ peek
~/ %peek
2014-01-04 06:59:56 +04:00
|= [way=?(%read %rite %both %free) axe=axis]
2013-09-29 00:21:18 +04:00
^- type
?: =(1 axe)
sut
=+ [now=(cap axe) lat=(mas axe)]
=+ gil=*(set type)
|- ^- type
?- sut
[%atom *] %void
[%cell *] ?:(=(2 now) ^$(sut p.sut, axe lat) ^$(sut q.sut, axe lat))
[%core *]
?: =(3 now)
2013-09-29 00:21:18 +04:00
?. (park way lat)
2014-01-05 02:57:44 +04:00
:: ~_ (dunk 'type')
~_ (show [%c 'axis'] [%d axe])
2013-09-29 00:21:18 +04:00
~|(%peek-park !!)
^$(sut p.sut, axe lat)
2013-09-29 00:21:18 +04:00
%noun
::
[%fork *] (fork $(sut p.sut) $(sut q.sut))
[%hold *]
?: (~(has in gil) sut)
%void
2013-09-29 00:21:18 +04:00
$(gil (~(put in gil) sut), sut repo)
::
%void %void
%noun %noun
* $(sut repo)
==
::
++ play
2013-09-29 00:21:18 +04:00
~/ %play
=> .(vet |)
2013-12-15 11:07:57 +04:00
|= gen=twig
2013-12-05 02:30:09 +04:00
^- type
2013-09-29 00:21:18 +04:00
?- gen
[^ *] (cell $(gen p.gen) $(gen q.gen))
2014-01-04 11:28:16 +04:00
[%bcpt *] $(gen (~(whip al q.gen) p:(seep %read p.gen)))
2013-09-29 00:21:18 +04:00
[%brcn *] (core sut %gold sut [[%0 0] p.gen])
[%cnts *] =+ lar=(foil (seek %read p.gen))
2013-12-15 12:23:23 +04:00
=+ mew=(snub q.gen)
=+ rag=q.q.lar
%- fire
|- ^- (list ,[p=type q=foot])
?@ mew
rag
$(mew t.mew, rag q:(tock p.i.mew ^$(gen q.i.mew) rag))
2013-09-29 00:21:18 +04:00
[%dtkt *] %noun
[%dtls *] [%atom %$]
2014-01-05 07:56:33 +04:00
[%dtzy *] ?:(=(%f p.gen) ?>((lte q.gen 1) bean) [%atom p.gen])
[%dtzz *] [%cube q.gen ?:(.?(q.gen) %noun [%atom p.gen])]
2013-09-29 00:21:18 +04:00
[%dttr *] %noun
[%dtts *] bean
[%dtwt *] bean
[%ktbr *] (wrap(sut $(gen p.gen)) %iron)
[%ktls *] $(gen p.gen)
[%ktpm *] (wrap(sut $(gen p.gen)) %zinc)
[%ktsg *] $(gen p.gen)
2013-12-21 05:02:26 +04:00
[%ktts *] (conk(sut $(gen q.gen)) p.gen)
2013-09-29 00:21:18 +04:00
[%ktwt *] (wrap(sut $(gen p.gen)) %lead)
2014-01-05 02:57:44 +04:00
[%sgzp *] ~_(duck(sut ^$(gen p.gen)) $(gen q.gen))
2013-09-29 00:21:18 +04:00
[%sggr *] $(gen q.gen)
[%tsgr *] $(gen q.gen, sut $(gen p.gen))
2014-01-04 06:59:56 +04:00
[%tstr *] $(gen r.gen, sut (busk p.gen q.gen))
2013-09-29 00:21:18 +04:00
[%wtcl *] =+ [fex=(gain p.gen) wux=(lose p.gen)]
%+ fork
?:(=(%void fex) %void $(sut fex, gen q.gen))
?:(=(%void wux) %void $(sut wux, gen r.gen))
2014-01-05 02:57:44 +04:00
[%zpcb *] ~_((show %o p.gen) $(gen q.gen))
2013-09-29 00:21:18 +04:00
[%zpcm *] (play p.gen)
[%zpcn ~] p:seed
[%zpfs *] %void
[%zpsm *] (cell $(gen p.gen) $(gen q.gen))
[%zpts *] %noun
[%zpzp ~] %void
* =+ doz=~(open ap gen)
2013-09-29 00:21:18 +04:00
?: =(doz gen)
2014-01-05 02:57:44 +04:00
~_ (show [%c 'hoon'] [%q gen])
2013-09-29 00:21:18 +04:00
~|(%play-open !!)
$(gen doz)
==
::
++ reco
2013-12-21 06:35:33 +04:00
|* fuy=_|=(p=type p)
2013-09-29 00:21:18 +04:00
=+ por=repo
=+ yot=(fuy por)
?: =(yot por)
?:(=(%void por) por sut)
yot
::
++ repo
^- type
?- sut
2013-12-26 21:12:07 +04:00
[%bull *] q.sut
2013-09-29 00:21:18 +04:00
[%core *] [%cell %noun p.sut]
[%cube *] q.sut
[%face *] q.sut
[%hold *] (rest p.sut)
%noun [%fork [%atom %$] [%cell %noun %noun]]
* ~|(%repo-fltt !!)
==
::
++ rest
~/ %rest
2013-12-15 11:07:57 +04:00
|= leg=(list ,[p=type q=twig])
2013-09-29 00:21:18 +04:00
^- type
2013-12-15 11:07:57 +04:00
?: (lien leg |=([p=type q=twig] (~(has in fan) [p q])))
2013-09-29 00:21:18 +04:00
~|(%rest-loop !!)
=> .(fan (~(gas in fan) leg))
%+ roll
%- %~ tap
in
2013-09-29 00:21:18 +04:00
%- ~(gas in *(set type))
2013-12-15 11:07:57 +04:00
(turn leg |=([p=type q=twig] (play(sut p) q)))
2013-09-29 00:21:18 +04:00
~
=+([p=*type q=`type`%void] |.((fork p q)))
::
++ seek
~/ %seek
2014-01-04 06:59:56 +04:00
|= [way=?(%read %rite %both %free) hyp=wing]
2013-09-29 00:21:18 +04:00
^- port
2013-12-26 21:12:07 +04:00
?~ hyp
2013-09-29 00:21:18 +04:00
[1 %& sut]
=> .(i.hyp ?^(i.hyp i.hyp [%| p=0 q=i.hyp]))
=+ zar=$(hyp t.hyp)
=+ ^= syp
?- -.q.zar
& p.q.zar
| (fire (turn q.q.zar |=([p=type q=foot] [p [%ash ~ 1]])))
==
?- i.hyp
[& *]
[(peg p.zar p.i.hyp) %& (peek(sut syp) way p.i.hyp)]
::
[| *]
=> .(sut syp)
=+ hud=(fink p.i.hyp way q.i.hyp)
[(peg p.zar p.hud) q.hud]
==
::
2013-12-23 03:32:30 +04:00
++ seep
2014-01-04 06:59:56 +04:00
|= [way=?(%read %rite %both %free) hyp=wing]
2013-12-26 21:12:07 +04:00
^- [p=axis q=type]
2013-12-23 03:32:30 +04:00
=+ zar=(seek way hyp)
2013-12-26 21:12:07 +04:00
?>(?=(& -.q.zar) [p.zar p.q.zar])
2013-09-29 00:21:18 +04:00
::
2014-01-05 06:05:33 +04:00
++ sift
|= ref=type
2014-01-27 22:49:26 +04:00
~+
2014-01-05 06:05:33 +04:00
^- type
2014-01-05 07:18:06 +04:00
~|(%sift-lose ?>((nest(sut ref) & -:!>(*typo)) ref))
2014-01-05 06:05:33 +04:00
::
2013-12-15 12:23:23 +04:00
++ snub
2013-12-17 08:48:40 +04:00
~/ %snub
2013-12-15 12:23:23 +04:00
|= har=(list ,[p=wing q=twig])
^- (list ,[p=wing q=twig])
(turn har |=([a=wing b=twig] [(flop a) b]))
::
2013-09-29 00:21:18 +04:00
++ tack
~/ %tack
|= [peh=wing mur=type]
=+ axe=1
|- ^- [p=axis q=type]
2013-12-31 23:30:37 +04:00
?~ peh
2013-09-29 00:21:18 +04:00
[axe mur]
=> .(i.peh ?^(i.peh i.peh [%| p=0 q=i.peh]))
?- i.peh
[& *]
2014-04-03 05:06:45 +04:00
=+ ^= sap ^- (unit term)
?.(&(=(1 p.i.peh) ?=([%face *] sut)) ~ [~ p.sut])
2013-09-29 00:21:18 +04:00
=+ vas=(peek %rite p.i.peh)
=+ gav=$(peh t.peh, sut vas, axe (peg axe p.i.peh))
2014-04-03 05:06:45 +04:00
=+ heh=(heal ~ p.i.peh q.gav)
[p.gav ?~(sap heh (face u.sap heh))]
2013-09-29 00:21:18 +04:00
::
[| *]
2014-02-11 09:34:24 +04:00
=+ dob=`post`(need q:(fino p.i.peh %rite q.i.peh))
~| [%tack-limb q.i.peh]
?: ?=(%2 -.q.dob)
=+ hoc=(peg axe p.dob)
=+ guh=$(peh t.peh, sut s.p.q.dob, axe (peg hoc r.p.q.dob))
=+ zig=$(peh q.p.q.dob, sut q.q.dob, mur q.guh)
=+ zug=(heal [~ q.i.peh] p.dob (busk(sut q.zig) p.p.q.dob q.p.q.dob))
[p.guh zug]
=+ wuf=(flay (flee dob))
2013-09-29 00:21:18 +04:00
=+ gav=$(peh t.peh, sut q.wuf, axe (peg axe p.wuf))
[p.gav (heal [~ q.i.peh] p.wuf q.gav)]
==
::
++ tock
~/ %tock
|= [peh=wing mur=type men=(list ,[p=type q=foot])]
^- [p=axis q=(list ,[p=type q=foot])]
=- [(need p.wib) q.wib]
^= wib
|- ^- [p=(unit axis) q=(list ,[p=type q=foot])]
?@ men
[*(unit axis) ~]
=+ geq=(tack(sut p.i.men) peh mur)
=+ mox=$(men t.men)
[(mate p.mox `_p.mox`[~ p.geq]) [[q.geq q.i.men] q.mox]]
::
++ wrap
~/ %wrap
|= yoz=?(%lead %iron %zinc)
^- type
?- sut
[%core *] ?.(=(%gold p.q.sut) ~|(%wrap-metl !!) sut(p.q yoz))
[%fork *] (fork $(sut p.sut) $(sut q.sut))
[%hold *] $(sut repo)
* ~|(%wrap-type !!)
==
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2fD, grammar ::
::
++ vang
|= [bug=? wer=path]
%*(. vast bug bug, wer wer)
::
++ vast
=+ [bug=`?`| was=*(set path) wer=*path]
|%
2013-09-29 00:21:18 +04:00
++ gash %+ cook
2013-12-15 11:07:57 +04:00
|= a=(list tyke) ^- tyke
2013-09-29 00:21:18 +04:00
?~(a ~ (weld i.a $(a t.a)))
(more fas gasp)
++ gasp ;~ pose
%+ cook
2013-12-15 11:07:57 +04:00
|=([a=tyke b=tyke c=tyke] :(weld a b c))
2013-09-29 00:21:18 +04:00
;~ plug
(cook |=(a=(list) (turn a |=(b=* ~))) (star tis))
2013-12-15 11:07:57 +04:00
(cook |=(a=twig [[~ a] ~]) hasp)
2013-09-29 00:21:18 +04:00
(cook |=(a=(list) (turn a |=(b=* ~))) (star tis))
==
(cook |=(a=(list) (turn a |=(b=* ~))) (plus tis))
==
++ glam ~+((glue ace))
++ hasp ;~ pose
(ifix [sel ser] wide)
(stag %cnhp (ifix [pel per] (most ace wide)))
2013-09-29 00:21:18 +04:00
%+ cook
2014-01-05 07:56:33 +04:00
|=(a=coin [%dtzy ?:(?=([~ %tas *] a) %tas %ta) ~(rent co a)])
2013-09-29 00:21:18 +04:00
nuck:so
==
++ mota %+ cook
|=([a=tape b=tape] (rap 3 (weld a b)))
;~(plug (star low) (star hig))
::
++ plex
2013-12-15 11:07:57 +04:00
|= gen=twig ~| [%plex gen] ^- path
2013-09-29 00:21:18 +04:00
?: ?=([%zpcb *] gen)
$(gen q.gen)
?> ?=([%clsg *] gen)
2014-01-05 07:56:33 +04:00
(turn p.gen |=(a=twig ?>(?=(%dtzy -.a) q.a)))
2013-09-29 00:21:18 +04:00
::
++ pray
2013-12-15 11:07:57 +04:00
|= gen=twig ~| %pray ^- twig
2013-09-29 00:21:18 +04:00
=+ rev=(plex gen)
?: (~(has in was) rev)
~|(%pray-loop !!)
2014-02-10 21:50:20 +04:00
=+ ruv=`path`(weld rev `path`[%hoon ~])
=+ txt=(,@ta .^(%cx ruv))
~| ruv
2013-09-29 00:21:18 +04:00
%+ rash txt
(ifix [gay gay] tall(was (~(put in was) rev), wer rev))
::
++ prey
2013-12-15 11:07:57 +04:00
|= gun=(list twig) ^- twig
2013-09-29 00:21:18 +04:00
?~ gun [~ 1]
?~ t.gun (pray i.gun)
[%tsgr (pray i.gun) $(gun t.gun)]
::
++ phax
|= ruw=(list (list beer))
2013-12-15 11:07:57 +04:00
=+ [yun=*(list twig) cah=*(list ,@)]
=+ wod=|=([a=tape b=(list twig)] ^+(b ?~(a b [[%clfs %smdq (flop a)] b])))
2013-09-29 00:21:18 +04:00
|- ^+ yun
?~ ruw
2013-09-29 00:21:18 +04:00
(flop (wod cah yun))
?~ i.ruw $(ruw t.ruw)
?@ i.i.ruw
$(i.ruw t.i.ruw, cah [i.i.ruw cah])
$(i.ruw t.i.ruw, cah ~, yun [p.i.i.ruw (wod cah yun)])
::
++ posh
2013-12-15 11:07:57 +04:00
|= [pre=(unit tyke) pof=(unit ,[p=@ud q=tyke])]
^- (list twig)
2013-09-29 00:21:18 +04:00
~| %posh-fail
=+ wom=(poof wer)
=+ ^= yez
?~ pre wom
=+ moz=(poon wom u.pre)
?~(pof moz (weld moz (slag (lent u.pre) wom)))
?~ pof yez
=+ zey=(flop yez)
=+ [moz=(scag p.u.pof zey) gul=(slag p.u.pof zey)]
(weld (flop gul) (poon (flop moz) q.u.pof))
::
2014-01-05 07:56:33 +04:00
++ poof |=(pax=path ^-(tusk (turn pax |=(a=@ta [%dtzy %ta a]))))
2013-09-29 00:21:18 +04:00
++ poon
2013-12-15 11:07:57 +04:00
|= [pag=tusk goo=tyke]
^- tusk
2013-09-29 00:21:18 +04:00
?~ goo ~
:- ?^(i.goo u.i.goo ?>(?=(^ pag) i.pag))
$(goo t.goo, pag ?~(pag ~ t.pag))
::
++ poor
%+ cook posh
;~ plug
(stag ~ gash)
2013-09-29 00:21:18 +04:00
;~(pose (stag ~ ;~(pfix cen porc)) (easy ~))
==
::
++ porc
;~ plug
(cook |=(a=(list) (lent a)) (star cen))
;~(pfix fas gash)
==
::
2014-03-26 04:48:22 +04:00
++ rump
%+ sear
|= [a=wing b=(unit twig)] ^- (unit twig)
?~(b [~ %cnzz a] ?.(?=([@ ~] a) ~ [~ [%dtzz %tas i.a] u.b]))
;~(plug rope ;~(pose (stag ~ ;~(pfix fas wide)) (easy ~)))
::
2013-09-29 00:21:18 +04:00
++ rood
;~ pfix fas
(stag %clsg poor)
==
2014-03-26 04:48:22 +04:00
::
++ rupl
%+ cook
|= [a=? b=(list twig) c=?]
?: a
?: c
[%clsg [%clsg b] ~]
[%clsg b]
?: c
[%clsg [%cltr b] ~]
[%cltr b]
;~ plug
;~ pose
(cold | (just '['))
(cold & (jest '~['))
==
::
;~ pose
(ifix [ace gap] (most gap tall))
(most ace wide)
==
::
;~ pose
(cold & (jest ']~'))
(cold | (just ']'))
==
==
::
2014-04-06 01:25:16 +04:00
++ sail !: :: template language
|= tol=?
2014-04-03 05:06:45 +04:00
|%
++ ape :: product twig
%- cook
:_ amp
|= tum=tuna ^- twig
?: ?=([%e *] tum)
2014-04-06 01:25:16 +04:00
[p.tum (sag q.tum)]
(sag tum ~)
2014-04-03 05:06:45 +04:00
::
++ amp :: entry point
;~(pfix sem ?:(tol bam bat))
::
++ bam :: tall top
%+ knee *tuna |. ~+
;~ pose
2014-04-06 01:25:16 +04:00
(stag %f ;~(pfix (plus ace) (cook rab puv)))
2014-04-05 23:04:05 +04:00
(stag %e ;~(plug hag nal))
2014-04-06 01:25:16 +04:00
(stag %e hul)
2014-04-05 02:35:59 +04:00
(stag %f nup)
2014-04-03 05:06:45 +04:00
;~(pfix tis (stag %f nol))
;~(pfix hep (stag %a ;~(pfix gap tall)))
;~(pfix lus (stag %b ;~(pfix gap tall)))
;~(pfix tar (stag %c ;~(pfix gap tall)))
;~(pfix cen (stag %d ;~(pfix gap tall)))
2014-04-09 02:26:01 +04:00
(easy [%f [%a [%smdq 10 ~]] ~])
2014-04-03 05:06:45 +04:00
==
::
++ bat :: wide outer top
%+ knee *tuna |. ~+
;~ pose
(stag %f nup)
(stag %f ped)
2014-04-06 01:25:16 +04:00
(stag %e ;~(plug hig lif))
2014-04-03 05:06:45 +04:00
==
::
++ bet :: wide inner top
%+ knee *tuna |. ~+
;~ pose
bat
;~(pfix hep (stag %a wide))
;~(pfix lus (stag %b wide))
;~(pfix tar (stag %c wide))
;~(pfix cen (stag %d wide))
==
::
++ fry :: mane as twig
%+ cook
|= [a=@tas b=(unit ,@tas)]
?~ b
2014-04-03 05:06:45 +04:00
[%dtzz %tas a]
[[%dtzz %tas a] [%dtzz %tas u.b]]
2014-04-05 02:35:59 +04:00
;~(plug sym ;~(pose (stag ~ ;~(pfix cab sym)) (easy ~)))
2014-04-03 05:06:45 +04:00
::
2014-04-05 23:04:05 +04:00
++ hag :: script or style
%+ cook |=(a=twig a)
;~ plug
(stag %dtzz (stag %tas ;~(pose (jest %script) (jest %style))))
(stag %clsg jaw)
==
::
2014-04-06 01:25:16 +04:00
++ hig :: simple head
(cook |=([a=twig b=(list twig)] [a %clsg b]) hog)
::
++ hog :: tag head
2014-04-05 02:35:59 +04:00
%+ cook
|= $: a=twig
b=(unit ,@tas)
c=(unit ,@tas)
d=(unit twig)
e=(list twig)
==
2014-04-06 01:25:16 +04:00
^- [twig (list twig)]
2014-04-05 02:35:59 +04:00
=. e ?~(b e [[[%dtzz %tas %class] [%smdq (trip u.b)]] e])
=. e ?~(c e [[[%dtzz %tas %id] [%smdq (trip u.c)]] e])
=. e ?~(d e [[[%dtzz %tas %href] u.d] e])
2014-04-06 01:25:16 +04:00
[a e]
2014-04-05 02:35:59 +04:00
;~ plug
fry
;~(pose (stag ~ ;~(pfix fas sym)) (easy ~))
;~(pose (stag ~ ;~(pfix pat sym)) (easy ~))
;~(pose (stag ~ ;~(pfix dot (stag %smdq soil))) (easy ~))
;~ pose
%+ ifix [pel per]
%+ more ;~(plug com ace)
;~(plug fry ;~(pfix ace wide))
::
(easy ~)
==
==
2014-04-09 02:26:01 +04:00
::
++ hoy :: tall attributes
%- star
;~ pfix ;~(plug gap tis)
;~ plug
(stag %dtzz (stag %tas sym))
;~(pfix gap tall)
==
==
::
2014-04-06 01:25:16 +04:00
++ hul :: tall preface
%+ cook
|= [a=[p=twig q=(list twig)] b=(list twig) c=(list tuna)]
^- [twig (list tuna)]
[[p.a %clsg (weld q.a b)] c]
2014-04-09 02:26:01 +04:00
;~(plug hog hoy nol)
2014-04-03 05:06:45 +04:00
::
2014-04-05 23:04:05 +04:00
++ jaw :: wide attributes
;~ pose
%+ ifix [pel per]
%+ more ;~(plug com ace)
;~(plug fry ;~(pfix ace wide))
::
(easy ~)
==
::
2014-04-03 05:06:45 +04:00
++ lif :: wide elements
%+ cook |=(a=(list tuna) a)
2014-04-05 02:35:59 +04:00
;~(pose ;~(pfix col pep) (cold ~ sem) (easy ~))
2014-04-03 05:06:45 +04:00
::
++ luf :: wide elements
%+ cook |=(a=(list tuna) a)
(star ;~(pfix ace bet))
::
2014-04-05 23:04:05 +04:00
++ nal :: unescaped tall tail
%+ cook |=(a=(list tuna) a)
%+ ifix [gap ;~(plug gap duz)]
%+ most gap
;~ pfix sem
;~ pose
;~ pfix ace
%+ cook
|= a=tape
[%a %smdq (weld a `tape`[`@`10 ~])]
(star (shim 32 255))
==
(easy [%a %smdq `@`10 ~])
==
2014-04-09 02:26:01 +04:00
==
2014-04-05 23:04:05 +04:00
::
2014-04-03 05:06:45 +04:00
++ nol :: tall tail
?> tol
%+ cook |=(a=(list tuna) a)
;~ pose
(cold ~ sem)
2014-04-05 02:35:59 +04:00
;~(pfix col pep(tol |))
2014-04-06 01:25:16 +04:00
;~(pfix ;~(plug col ace) (cook rab(tol |) puv))
2014-04-05 23:04:05 +04:00
(ifix [gap ;~(plug gap duz)] (most gap amp))
2014-04-03 05:06:45 +04:00
==
::
++ nup :: wide quote
%+ cook |=(a=(list tuna) a)
2014-04-06 01:25:16 +04:00
(ifix [doq doq] (cook rab puv))
2014-04-03 05:06:45 +04:00
::
2014-04-06 01:25:16 +04:00
++ pab (ifix [kel ker] ;~(plug hig luf)) :: bracketed element
++ ped :: wide flow
2014-04-03 05:06:45 +04:00
%+ cook |=(a=(list tuna) a)
(ifix [pel per] (more ace bet))
::
++ pep :: wrapped tuna
%+ cook |=(a=(list tuna) a)
;~ pose
ped
(ifix [pel per] (more ace bet))
;~ plug
bat
(easy ~)
==
==
::
2014-04-06 01:25:16 +04:00
++ puv :: wide/tall flow
%+ cook |=(a=(list beet) a)
2014-04-03 05:06:45 +04:00
%- star
;~ pose
;~(pfix bas ;~(pose bas hep doq lus tar cen sem kel bix:ab))
2014-04-06 01:25:16 +04:00
;~(pfix hep (stag %a sump))
;~(pfix lus (stag %b sump))
;~(pfix tar (stag %c sump))
;~(pfix cen (stag %d sump))
;~(pfix sem (stag %e pab(tol |)))
2014-04-03 05:06:45 +04:00
;~ pose
?:(tol (shim 32 91) ;~(pose (shim 32 33) (shim 35 91)))
(shim 93 122)
(shim 124 126)
(shim 128 255)
==
2014-04-06 01:25:16 +04:00
(stag %a sump)
2014-04-03 05:06:45 +04:00
==
::
2014-04-06 01:25:16 +04:00
++ rab :: beet to tuna
|= reb=(list beet)
^- (list tuna)
=| [sim=(list ,@) tuz=(list tuna)]
|- ^- (list tuna)
?~ reb
=. sim
?. tol sim
2014-04-09 02:26:01 +04:00
[10 |-(?~(sim sim ?:(=(32 i.sim) $(sim t.sim) sim)))]
2014-04-06 01:25:16 +04:00
?~(sim tuz [[%a %smdq (flop sim)] tuz])
?@ i.reb
$(reb t.reb, sim [i.reb sim])
=+ zut=$(reb t.reb, sim ~)
?~ sim [i.reb zut]
[[%a %smdq (flop sim)] i.reb zut]
::
++ sag :: tuna to twig
|= [lut=(list tuna)]
^- twig
:- %cltr
|- ^- (list twig)
?~ lut [[%dtzz %n ~] ~]
?- -.i.lut
%a [[%clfs p.i.lut] $(lut t.lut)]
%b [p.i.lut $(lut t.lut)]
%c :_ ~
:+ %cndt `twig`[p.i.lut [%cltr $(lut t.lut)]]
:+ %tsbr `tile`[[%axil %noun] [%axil %noun]]
:- %brcn
^- (map term foot)
:_ [~ ~]
=+ sug=[[%& 12] ~]
:+ %$ %elm
:^ %wtsg sug
[%cnts sug [[[[%& 1] ~] [~ 13]] ~]]
[%cnts sug [[[[%& 3] ~] [%cnts [%$ ~] [[sug [~ 25]] ~]]] ~]]
%d [[%cnhp p.i.lut [%cltr $(lut t.lut)] ~] ~]
%e [[p.i.lut ^$(lut [[%f q.i.lut] ~])] $(lut t.lut)]
%f $(lut (weld p.i.lut t.lut))
==
2014-04-03 05:06:45 +04:00
--
::
2013-09-29 00:21:18 +04:00
++ scat
2013-12-15 11:07:57 +04:00
%+ knee *twig |. ~+
%- stew
^. stet ^. limo
2013-12-21 06:35:33 +04:00
:~
:- '!'
2013-09-29 00:21:18 +04:00
;~ pose
(stag %wtzp ;~(pfix zap wide))
(stag %zpzp (cold ~ ;~(plug zap zap)))
(stag %zpcn (cold ~ ;~(plug zap cen)))
==
:- '$'
2014-03-26 04:48:22 +04:00
rump
:: (cook |=(a=wing [%cnts a ~]) rope)
:- '%'
2013-09-29 00:21:18 +04:00
;~ pfix cen
;~ pose
2013-12-15 11:07:57 +04:00
(cook |=([a=@ud b=tyke] [%clsg (posh ~ ~ a b)]) porc)
2014-01-05 07:56:33 +04:00
(stag %dtzz (stag %tas (cold %$ buc)))
(stag %dtzz (stag %f (cold & pam)))
(stag %dtzz (stag %f (cold | bar)))
(stag %dtzz (stag %ta qut))
2013-09-29 00:21:18 +04:00
(cook (jock &) nuck:so)
(cook |=(a=(list) [%clsg (posh ~ ~ (lent a) ~)]) (star cen))
:: (easy [%clsg (poof wer)])
==
==
:- '&'
2013-09-29 00:21:18 +04:00
;~ pose
2013-12-15 13:48:16 +04:00
(cook |=(a=wing [%cnts a ~]) rope)
2013-09-29 00:21:18 +04:00
(stag %wtpm ;~(pfix pam (ifix [pel per] (most ace wide))))
2014-01-05 07:56:33 +04:00
(stag %dtzy (stag %f (cold & pam)))
2013-09-29 00:21:18 +04:00
==
:- '\''
2014-01-05 07:56:33 +04:00
(stag %dtzy (stag %t qut))
:- '('
(stag %cnhp (ifix [pel per] (most ace wide)))
:- '*'
2013-09-29 00:21:18 +04:00
;~ pose
2013-12-16 06:44:44 +04:00
(stag %bctr ;~(pfix tar hill))
2013-09-29 00:21:18 +04:00
==
:- '+'
2013-09-29 00:21:18 +04:00
;~ pose
(stag %dtls ;~(pfix lus (ifix [pel per] wide)))
::
%+ cook
|= a=(list (list beer))
:- %clfs
[%smdq |-(?~(a ~ (weld i.a $(a t.a))))]
(most dog ;~(pfix lus soil))
::
2013-12-15 13:48:16 +04:00
(cook |=(a=wing [%cnts a ~]) rope)
2013-09-29 00:21:18 +04:00
==
:- '-'
2013-09-29 00:21:18 +04:00
;~ pose
2014-01-05 07:56:33 +04:00
(stag %dtzy tash:so)
2013-09-29 00:21:18 +04:00
::
%+ cook
|= a=(list (list beer))
2014-03-25 21:46:30 +04:00
[%clsg (phax a)]
2013-09-29 00:21:18 +04:00
(most dog ;~(pfix hep soil))
::
2013-12-15 13:48:16 +04:00
(cook |=(a=wing [%cnts a ~]) rope)
2013-09-29 00:21:18 +04:00
==
:- '.'
2013-09-29 00:21:18 +04:00
;~ pose
2013-12-09 02:40:16 +04:00
%+ cook
2013-12-15 11:07:57 +04:00
|= a=coin ^- twig
2013-12-09 02:40:16 +04:00
?- -.a
2014-01-05 07:56:33 +04:00
~ [%dtzy p.a]
%blob [%dtzz %$ p.a]
2013-12-09 02:40:16 +04:00
%many [%cltr (turn p.a |=(b=coin ^$(a b)))]
==
;~(pfix dot perd:so)
::
2013-12-15 13:48:16 +04:00
(cook |=(a=wing [%cnts a ~]) rope)
2013-09-29 00:21:18 +04:00
==
:- ['0' '9']
2014-01-05 07:56:33 +04:00
(stag %dtzy bisk:so)
:- ':'
2014-03-25 21:46:30 +04:00
;~ pfix col
;~ pose
(stag %smcl (ifix [pel per] (most ace wide)))
;~(pfix fas (stag %clfs wide))
==
==
:- '='
2013-09-29 00:21:18 +04:00
(stag %dtts ;~(pfix tis (ifix [pel per] ;~(glam wide wide))))
:- '?'
2014-01-16 10:43:56 +04:00
(stag %bccm (stag %fern ;~(pfix wut (ifix [pel per] (most ace toil)))))
:- '['
2014-03-26 04:48:22 +04:00
rupl
:- ','
(stag %bccm ;~(pfix com hill))
:- '^'
2013-09-29 00:21:18 +04:00
;~ pose
;~ pfix ket
;~ pose
;~ pfix col
%+ cook
2013-12-17 23:13:44 +04:00
|= [a=tile b=twig] :: XX shd be static
2013-09-29 00:21:18 +04:00
=+ rev=(plex b)
2013-12-17 23:13:44 +04:00
:+ %smsm ~(clam al a)
2014-01-05 07:56:33 +04:00
[%dtkt %dtzz %$ %cx rev]
2013-12-17 23:13:44 +04:00
;~(plug hill rood)
2013-09-29 00:21:18 +04:00
==
(cook prey (most ket rood))
==
==
2014-01-05 07:18:06 +04:00
(stag %cnzz rope)
2013-12-16 03:40:44 +04:00
(stag %bczp (cold %cell ket))
2013-09-29 00:21:18 +04:00
==
:- '_'
(stag %bccb ;~(pfix cab hill))
:- '`'
2013-09-29 00:21:18 +04:00
;~ pfix tec
;~ pose
%+ cook
2014-01-05 07:56:33 +04:00
|=([a=@ta b=twig] [%ktls [%dtzy a 0] [%ktls [%dtzy %$ 0] b]])
2013-09-29 00:21:18 +04:00
;~(pfix pat ;~(plug mota ;~(pfix tec wide)))
2013-12-14 01:11:26 +04:00
(stag %kthp ;~(plug toil ;~(pfix tec wide)))
2013-12-17 08:48:40 +04:00
(stag %ktls ;~(pfix lus ;~(plug wide ;~(pfix tec wide))))
2014-03-25 21:46:30 +04:00
(cook |=(a=twig [[%dtzz %n ~] a]) wide)
2013-09-29 00:21:18 +04:00
==
==
2014-03-26 04:48:22 +04:00
:- '#'
;~(pfix hax rupl)
:- '"'
2013-09-29 00:21:18 +04:00
%+ cook
|= a=(list (list beer))
[%smdq |-(?~(a ~ (weld i.a $(a t.a))))]
(most dog soil)
:- ['a' 'z']
2014-03-26 04:48:22 +04:00
rump
:- '|'
2013-09-29 00:21:18 +04:00
;~ pose
2013-12-15 13:48:16 +04:00
(cook |=(a=wing [%cnts a ~]) rope)
2013-09-29 00:21:18 +04:00
(stag %wtbr ;~(pfix bar (ifix [pel per] (most ace wide))))
2014-01-05 07:56:33 +04:00
(stag %dtzy (stag %f (cold | bar)))
2013-09-29 00:21:18 +04:00
==
:- '~'
2013-09-29 00:21:18 +04:00
;~ pose
2014-03-26 04:48:22 +04:00
rupl
2013-09-29 00:21:18 +04:00
::
;~ pfix sig
;~ pose
(stag %clsg (ifix [sel ser] (most ace wide)))
::
%+ stag %cnsg
2013-09-29 00:21:18 +04:00
%+ ifix
[pel per]
2013-09-29 00:21:18 +04:00
;~(glam rope wide (stag %cltr (most ace wide)))
::
(cook (jock |) twid:so)
2013-12-16 03:40:44 +04:00
(easy [%bczp %null])
2013-09-29 00:21:18 +04:00
==
==
==
:- '/'
rood
:- '<'
(ifix [gal gar] (stag %hxgl (most ace wide)))
:- '>'
(ifix [gar gal] (stag %hxgr (most ace wide)))
2013-09-29 00:21:18 +04:00
==
++ soil
%+ ifix
[doq doq]
%- star
;~ pose
;~(pfix bas ;~(pose bas doq kel bix:ab))
;~ pose
(shim 32 33)
(shim 35 91)
(shim 93 122)
(shim 124 126)
2013-09-29 00:21:18 +04:00
(shim 128 255)
==
2014-04-06 01:25:16 +04:00
(stag ~ sump)
2013-09-29 00:21:18 +04:00
==
2014-04-06 01:25:16 +04:00
++ sump (ifix [kel ker] (stag %cltr (most ace wide)))
2013-12-13 05:44:15 +04:00
++ noil
|= tol=?
2013-12-13 23:21:48 +04:00
=< ;~ pfix buc
%- stew
^. stet ^. limo
2013-12-21 06:35:33 +04:00
:~
['|' (rung bar %reed exqb)]
['&' (rung pam %bush exqb)]
['?' (rung wut %fern exqc)]
['_' (rung cab %weed exqd)]
['^' (rung ket %herb exqd)]
['=' (rung tis %bark exqe)]
:- '+'
2013-12-15 07:39:43 +04:00
%+ cook
2013-12-16 06:44:44 +04:00
|=([a=tile b=tile] [%weed [%brls a [%bccb b]]])
2013-12-15 07:39:43 +04:00
;~(pfix lus (toad exqb))
:- '%'
2013-12-13 05:44:15 +04:00
;~ pfix cen
%+ sear
|= a=(list tile) ^- (unit tile)
=- ?~(b ~ ?~(u.b ~ [~ %kelp i.u.b t.u.b]))
^= b
|- ^- (unit (list line))
?~ a [~ ~]
=+ c=$(a t.a)
?~ c ~
?. ?=([[%leaf *] *] i.a) ~
[~ [p.i.a q.i.a] u.c]
(toad exqc)
==
:- ':'
;~ pfix col
2013-12-13 05:44:15 +04:00
%+ cook
|=(a=(list tile) ?~(a !! ?~(t.a i.a [i.a $(a t.a)])))
(toad exqc)
==
==
==
|%
++ toad
2013-12-21 06:35:33 +04:00
|* har=_exqa
2013-12-13 05:44:15 +04:00
=+ dur=(ifix [pel per] $:har(tol |))
?:(tol ;~(pose ;~(pfix gap $:har(tol &)) dur) dur)
::
++ rung
2013-12-21 06:35:33 +04:00
|* [dif=_rule tuq=* har=_exqa]
2013-12-13 05:44:15 +04:00
;~(pfix dif (stag tuq (toad har)))
::
++ gunk ~+((glue muck))
++ muck ?:(tol gap ace)
2013-12-21 06:35:33 +04:00
++ butt |*(zor=_rule ?:(tol ;~(sfix zor ;~(plug gap duz)) zor))
2013-12-13 05:44:15 +04:00
++ loaf ?:(tol howl toil)
++ lobe ?:(tol tall wide)
++ exqa |.(loaf)
++ exqb |.(;~(gunk loaf loaf))
++ exqc |.((butt (most muck loaf)))
++ exqd |.(lobe)
++ exqe |.(;~(gunk sym loaf))
--
2013-09-29 00:21:18 +04:00
++ norm
|= tol=?
=< %- stew
^. stet ^. limo
:~ :- '|'
2013-09-29 00:21:18 +04:00
;~ pfix bar
%- stew
^. stet ^. limo
:~ ['_' (rune cab %brcb expu)]
['%' (rune cen %brcn expe)]
['.' (rune dot %brdt expa)]
2014-01-28 02:24:27 +04:00
['/' (rune fas %brfs expu)]
['-' (rune hep %brhp expa)]
['^' (rune ket %brkt expr)]
['+' (rune lus %brls expo)]
['*' (rune tar %brtr expo)]
['=' (rune tis %brts expo)]
['?' (rune wut %brwt expa)]
2013-09-29 00:21:18 +04:00
==
==
:- '%'
2013-09-29 00:21:18 +04:00
;~ pfix cen
%- stew
^. stet ^. limo
:~ ['_' (rune cab %cncb exph)]
[':' (rune col %cncl expb)]
['.' (rune dot %cndt expb)]
2014-01-04 06:59:56 +04:00
['^' (rune ket %cnkt expd)]
['+' (rune lus %cnls expc)]
['-' (rune hep %cnhp expk)]
['~' (rune sig %cnsg expq)]
['*' (rune tar %cntr expm)]
['=' (rune tis %cnts exph)]
2013-09-29 00:21:18 +04:00
==
==
:- '$'
2014-01-04 11:28:16 +04:00
;~ pose
(rune cab %bccb expv)
(rune com %bccm expv)
(stag %bccm (noil tol))
==
:- ':'
2013-09-29 00:21:18 +04:00
;~ pfix col
%- stew
^. stet ^. limo
:~ ['_' (rune cab %clcb expb)]
2014-03-25 21:46:30 +04:00
:: ['~' (rune cen %clcn exps)]
['/' (rune fas %clfs expa)]
2014-01-04 06:59:56 +04:00
['^' (rune ket %clkt expd)]
['+' (rune lus %clls expc)]
['-' (rune hep %clhp expb)]
['~' (rune sig %clsg exps)]
['*' (rune tar %cltr exps)]
2013-09-29 00:21:18 +04:00
==
==
:- '.'
2013-09-29 00:21:18 +04:00
;~ pfix dot
%- stew
^. stet ^. limo
:~ ['+' (rune lus %dtls expa)]
['*' (rune tar %dttr expb)]
['=' (rune tis %dtts expb)]
['?' (rune wut %dtwt expa)]
['^' (rune ket %dtkt expn)]
2013-09-29 00:21:18 +04:00
==
==
:- '^'
2013-09-29 00:21:18 +04:00
;~ pfix ket
%- stew
^. stet ^. limo
:~ ['|' (rune bar %ktbr expa)]
['.' (rune dot %ktdt expb)]
['-' (rune hep %kthp expo)]
['+' (rune lus %ktls expb)]
['&' (rune pam %ktpm expa)]
['~' (rune sig %ktsg expa)]
['=' (rune tis %ktts expg)]
['?' (rune wut %ktwt expa)]
2013-09-29 00:21:18 +04:00
==
==
:- '~'
2013-09-29 00:21:18 +04:00
;~ pfix sig
%- stew
^. stet ^. limo
:~ ['|' (rune bar %sgbr expb)]
['$' (rune buc %sgbc expg)]
['_' (rune cab %sgcb expb)]
['%' (rune cen %sgcn hind)]
['/' (rune fas %sgfs hine)]
['<' (rune gal %sggl hinb)]
['>' (rune gar %sggr hinb)]
['+' (rune lus %sgls hinc)]
['&' (rune pam %sgpm hinf)]
['?' (rune wut %sgwt hing)]
['=' (rune tis %sgts expb)]
['!' (rune zap %sgzp expb)]
2013-09-29 00:21:18 +04:00
==
==
:- ';'
2013-09-29 00:21:18 +04:00
;~ pfix sem
%- stew
^. stet ^. limo
2014-01-05 08:11:15 +04:00
:~ [':' (rune col %smcl expi)]
['.' (rune dot %smdt expi)]
['~' (rune sig %smsg expi)]
[';' (rune sem %smsm expb)]
2013-09-29 00:21:18 +04:00
==
==
:- '='
2013-09-29 00:21:18 +04:00
;~ pfix tis
%- stew
^. stet ^. limo
:~ ['|' (rune bar %tsbr expo)]
['.' (rune dot %tsdt expq)]
['^' (rune ket %tskt expd)]
[':' (rune col %tscl expp)]
['<' (rune gal %tsgl expb)]
['>' (rune gar %tsgr expb)]
['-' (rune hep %tshp expb)]
2013-12-23 03:32:30 +04:00
['*' (rune tar %tstr expj)]
['+' (rune lus %tsls expb)]
['~' (rune sig %tssg expi)]
2013-09-29 00:21:18 +04:00
==
==
:- '?'
2013-09-29 00:21:18 +04:00
;~ pfix wut
%- stew
^. stet ^. limo
:~ ['|' (rune bar %wtbr exps)]
[':' (rune col %wtcl expc)]
['.' (rune dot %wtdt expc)]
['<' (rune gal %wtgl expb)]
['>' (rune gar %wtgr expb)]
2014-01-27 23:09:56 +04:00
['-' (rune hep %wthz expx)]
2014-01-04 11:28:16 +04:00
['^' (rune ket %wtkz expf)]
2014-01-01 10:48:21 +04:00
['=' (rune tis %wtts expw)]
2014-01-27 23:09:56 +04:00
['+' (rune lus %wtlz expy)]
['&' (rune pam %wtpm exps)]
2014-01-04 11:28:16 +04:00
['@' (rune pat %wtpz expf)]
['~' (rune sig %wtsz expf)]
['!' (rune zap %wtzp expa)]
2013-09-29 00:21:18 +04:00
==
==
:- '!'
2013-09-29 00:21:18 +04:00
;~ pfix zap
%- stew
^. stet ^. limo
:~ [':' ;~(pfix col (toad expz))]
[',' (rune com %zpcm expb)]
[';' (rune sem %zpsm expb)]
['^' ;~(pfix ket (cook prey (toad exps)))]
['>' (rune gar %zpgr expa)]
['=' (rune tis %zpts expa)]
2014-01-05 05:15:52 +04:00
['?' (rune wut %zpwt hinh)]
2013-09-29 00:21:18 +04:00
==
==
==
|%
++ boog
%+ knee [p=*term q=*foot] |. ~+
;~ pfix lus
;~ pose
%+ cook
2013-12-15 11:07:57 +04:00
|=([a=%ash b=term c=twig] [b a c])
2013-09-29 00:21:18 +04:00
;~ gunk
(cold %ash (just '+'))
;~(pose (cold %$ buc) sym)
loaf
==
::
%+ cook
2013-12-15 11:07:57 +04:00
|=([a=%elm b=term c=twig] [b a c])
2013-09-29 00:21:18 +04:00
;~ gunk
(cold %elm (just '-'))
;~(pose (cold %$ buc) sym)
loaf
==
::
%+ cook
|=([a=%oak b=term] [b a ~])
;~ gunk
(cold %oak (just '|'))
;~(pose (cold %$ buc) sym)
2013-09-29 00:21:18 +04:00
==
==
==
::
++ wisp
%- ulva
%+ cook
|=(a=(list ,[p=term q=foot]) (~(gas by *(map term foot)) a))
(most muck boog)
::
++ toad
2013-12-21 06:35:33 +04:00
|* har=_expa
2013-09-29 00:21:18 +04:00
=+ dur=(ifix [pel per] $:har(tol |))
?:(tol ;~(pose ;~(pfix gap $:har(tol &)) dur) dur)
::
++ rune
2013-12-21 06:35:33 +04:00
|* [dif=_rule tuq=* har=_expa]
2013-09-29 00:21:18 +04:00
;~(pfix dif (stag tuq (toad har)))
::
++ glop ~+((glue mash))
++ gunk ~+((glue muck))
2013-12-21 06:35:33 +04:00
++ butt |*(zor=_rule ?:(tol ;~(sfix zor ;~(plug gap duz)) zor))
++ ulva |*(zor=_rule ?.(tol fail ;~(sfix zor ;~(plug gap dun))))
2013-09-29 00:21:18 +04:00
++ neck ;~(pose duz ;~(pfix ;~(plug duq gap) wisp))
++ hank (most muck loaf)
++ loaf ?:(tol tall wide)
2013-12-14 00:52:06 +04:00
++ lobe ?:(tol howl toil)
2013-09-29 00:21:18 +04:00
++ mash ?:(tol gap ;~(plug com ace))
++ muck ?:(tol gap ace)
2014-01-04 06:59:56 +04:00
++ teak %+ knee *tiki |. ~+
=+ ^= gub
|= [a=term b=$%([& p=wing] [| p=twig])]
^- tiki
?-(-.b %& [%& [~ a] p.b], %| [%| [~ a] p.b])
=+ ^= wyp
;~ pose
2014-01-04 06:59:56 +04:00
%+ cook gub
;~ plug
2014-01-04 06:59:56 +04:00
sym
;~(pfix tis ;~(pose (stag %& rope) (stag %| wide)))
==
::
(stag %& (stag ~ rope))
(stag %| (stag ~ wide))
==
?. tol wyp
;~ pose
wyp
::
;~ pfix
;~(plug ket tis gap)
%+ cook gub
;~ plug
2014-01-04 06:59:56 +04:00
sym
;~(pfix gap ;~(pose (stag %& rope) (stag %| tall)))
==
==
::
(stag %| (stag ~ tall))
==
2013-12-15 09:42:27 +04:00
++ race (most mash ;~(gunk lobe loaf))
2013-09-29 00:21:18 +04:00
++ rack (most mash ;~(gunk loaf loaf))
2013-12-15 13:02:05 +04:00
++ rick (most mash ;~(gunk rope loaf))
2013-09-29 00:21:18 +04:00
++ expa |.(loaf)
++ expb |.(;~(gunk loaf loaf))
++ expc |.(;~(gunk loaf loaf loaf))
++ expd |.(;~(gunk loaf loaf loaf loaf))
++ expe |.(wisp)
2014-01-04 06:59:56 +04:00
++ expf |.(;~(gunk teak loaf loaf))
2013-09-29 00:21:18 +04:00
++ expg |.(;~(gunk sym loaf))
2013-12-15 13:02:05 +04:00
++ exph |.((butt ;~(gunk rope rick)))
2013-09-29 00:21:18 +04:00
++ expi |.((butt ;~(gunk loaf hank)))
2013-12-23 03:32:30 +04:00
++ expj |.(;~(gunk sym rope loaf))
++ expk |.(;~(gunk loaf ;~(plug loaf (easy ~))))
2013-12-15 13:02:05 +04:00
++ expm |.((butt ;~(gunk rope loaf rick)))
2013-09-29 00:21:18 +04:00
++ expn |.((stag %cltr (butt hank)))
2013-12-14 00:52:06 +04:00
++ expo |.(;~(gunk lobe loaf))
2013-12-15 13:48:16 +04:00
++ expp |.(;~(gunk (butt rick) loaf))
2013-09-29 00:21:18 +04:00
++ expq |.(;~(gunk rope loaf loaf))
++ expr |.(;~(gunk loaf wisp))
2013-12-14 00:52:06 +04:00
++ exps |.((butt hank))
2013-12-15 10:27:48 +04:00
++ expt |.((butt ;~(gunk loaf race)))
2013-12-15 09:42:27 +04:00
++ expu |.(;~(gunk lobe wisp))
2014-01-04 11:28:16 +04:00
++ expv |.(lobe)
2014-01-01 00:11:16 +04:00
++ expw |.(;~(gunk lobe rope))
2014-01-27 23:09:56 +04:00
++ expx |.((butt ;~(gunk teak race)))
++ expy |.((butt ;~(gunk teak loaf race)))
2013-09-29 00:21:18 +04:00
++ expz |.(loaf(bug &))
++ hina |.(;~(gunk (ifix [sel ser] ;~(gunk dem dem)) loaf))
++ hinb |.(;~(gunk bont loaf))
++ hinc |.(;~(pose ;~(gunk bony loaf) ;~(plug (easy ~) loaf)))
++ hind |.(;~(gunk bonk loaf bonz loaf))
++ hine |.(;~(gunk bonk loaf))
++ hinf |.
;~ pose
2013-09-29 00:21:18 +04:00
;~(gunk (cook lent (stun [1 3] gar)) loaf loaf)
(stag 0 ;~(gunk loaf loaf))
==
++ hing |.
;~ pose
;~(gunk (cook lent (stun [1 3] gar)) loaf loaf loaf)
(stag 0 ;~(gunk loaf loaf loaf))
==
++ bonk
2013-09-29 00:21:18 +04:00
;~ pfix cen
;~ pose
;~(plug sym ;~(pfix col ;~(plug sym ;~(pfix dot ;~(pfix dot dem)))))
;~(plug sym ;~(pfix col ;~(plug sym ;~(pfix dot dem))))
;~(plug sym ;~(pfix dot dem))
sym
==
==
2014-01-05 05:15:52 +04:00
++ hinh |.
;~ gunk
;~ pose
dem
2014-01-05 05:15:52 +04:00
(ifix [sel ser] ;~(plug dem ;~(pfix ace dem)))
==
loaf
==
++ bont ;~ (bend)
;~(pfix cen sym)
2014-01-04 11:28:16 +04:00
;~(pfix dot ;~(pose wide ;~(pfix muck loaf)))
==
2013-09-29 00:21:18 +04:00
++ bony (cook |=(a=(list) (lent a)) (plus tis))
++ bonz
;~ pose
(cold ~ sig)
%+ ifix
2013-12-21 04:59:03 +04:00
?:(tol [;~(plug duz gap) ;~(plug gap duz)] [pel per])
2013-09-29 00:21:18 +04:00
(more mash ;~(gunk ;~(pfix cen sym) loaf))
==
--
::
++ lung
~+
%- bend
2013-12-15 11:07:57 +04:00
|= $: ros=twig
2013-12-15 09:07:33 +04:00
$= vil
2013-12-15 11:07:57 +04:00
$% [%tis p=twig]
[%col p=twig]
[%ket p=twig]
2013-12-17 08:48:40 +04:00
[%pat p=tile]
2014-02-10 21:50:20 +04:00
[%pel p=tram]
2013-12-15 09:07:33 +04:00
==
==
2013-12-15 11:07:57 +04:00
^- (unit twig)
2013-09-29 00:21:18 +04:00
?- -.vil
2013-12-21 04:59:03 +04:00
%tis [~ %ktts ~(hock ap ros) p.vil]
2013-09-29 00:21:18 +04:00
%col [~ %tsgl ros p.vil]
2013-12-15 13:48:16 +04:00
%pel [~ %cnts ~(rake ap ros) p.vil]
2013-12-17 08:48:40 +04:00
%pat [~ %bcpt ~(rake ap ros) p.vil]
2013-09-29 00:21:18 +04:00
%ket [~ ros p.vil]
==
::
++ long
2013-12-15 11:07:57 +04:00
%+ knee *twig |. ~+
2013-09-29 00:21:18 +04:00
;~ lung
scat
;~ pose
;~(plug (cold %tis tis) wide)
;~(plug (cold %col col) wide)
;~(plug (cold %ket ket) wide)
2013-12-17 08:48:40 +04:00
;~(plug (cold %pat pat) hill)
2013-09-29 00:21:18 +04:00
;~ plug
(easy %pel)
2013-12-15 12:23:23 +04:00
(ifix [pel per] lobo)
2013-09-29 00:21:18 +04:00
==
==
==
::
2013-12-15 12:23:23 +04:00
++ lobo (most ;~(plug com ace) ;~(glam rope wide))
2013-09-29 00:21:18 +04:00
++ loon (most ;~(plug com ace) ;~(glam wide wide))
2013-11-23 00:22:14 +04:00
++ lute
~+
%+ stag %cltr
%+ ifix
[;~(plug sel gap) ;~(plug gap ser)]
(most gap tall)
::
2013-09-29 00:21:18 +04:00
++ rope
2013-12-26 21:12:07 +04:00
%+ knee *wing
2013-09-29 00:21:18 +04:00
|. ~+
%+ (slug `wing`~ |=([a=wing b=wing] (weld a b)))
dot
;~ pose
%+ cook
2013-09-29 00:21:18 +04:00
|=([a=(list) b=term] [?~(a b [%| (lent a) b]) ~])
;~(plug (star ket) ;~(pose sym (cold %$ buc)))
::
%+ cook
|=(a=limb [a ~])
%+ cook
|=(a=axis [%& a])
;~ pose
;~(pfix lus dim:ag)
2013-09-29 00:21:18 +04:00
;~(pfix pam (cook |=(a=@ ?:(=(0 a) 0 (mul 2 +($(a (dec a)))))) dim:ag))
;~(pfix bar (cook |=(a=@ ?:(=(0 a) 1 +((mul 2 $(a (dec a)))))) dim:ag))
ven
2013-09-29 00:21:18 +04:00
(cold 1 dot)
==
==
::
2014-04-03 05:06:45 +04:00
++ tall %+ knee *twig
2014-04-06 01:25:16 +04:00
|.(~+((wart ;~(pose (norm &) long lute ape:(sail &)))))
++ wide (knee *twig |.(~+((wart ;~(pose (norm |) long ape:(sail |))))))
2013-12-16 05:15:04 +04:00
++ hill (knee *tile |.(~+(;~(pose (noil |) toil))))
2013-12-13 05:44:15 +04:00
++ howl (knee *tile |.(~+(;~(pose (noil &) toil))))
++ toil
%+ knee *tile |. ~+
%- stew
^. stet ^. limo
2013-12-21 06:35:33 +04:00
:~
:- '%'
2013-12-15 09:07:33 +04:00
;~ pfix cen
2013-12-13 05:44:15 +04:00
;~ pose
2013-12-15 09:07:33 +04:00
(stag %leaf (stag %tas (cold %$ buc)))
(stag %leaf (stag %f (cold & pam)))
(stag %leaf (stag %f (cold | bar)))
(stag %leaf (stag %ta qut))
%+ cook
|= lot=coin ^- tile
?- -.lot
~ [%leaf p.lot]
%blob
?@(p.lot [%leaf %$ p.lot] [$(p.lot -.p.lot) $(p.lot +.p.lot)])
::
%many
?~(p.lot [%leaf %n ~] [$(lot i.p.lot) $(p.lot t.p.lot)])
==
nuck:so
2013-12-13 05:44:15 +04:00
==
2013-12-15 09:07:33 +04:00
==
:- '&'
(stag %leaf (stag %f (cold & pam)))
:- '*'
(cold [%axil %noun] tar)
:- '?'
2013-12-15 09:07:33 +04:00
;~ pose
(stag %fern ;~(pfix wut (ifix [pel per] (most ace toil))))
(stag %axil (cold %bean wut))
2013-12-15 09:07:33 +04:00
==
:- '@'
;~(pfix pat (stag %axil (stag %atom mota)))
:- '^'
2013-12-15 09:07:33 +04:00
;~ pose
2014-01-05 07:18:06 +04:00
(stag %herb (stag %cnzz rope))
(cold [%axil %cell] ket)
2013-12-15 09:07:33 +04:00
==
:- '('
(stag %herb wide)
:- '.'
2014-01-21 01:50:54 +04:00
(stag %herb (stag %cnzz rope))
:- '['
2013-12-15 09:07:33 +04:00
%+ ifix [sel ser]
%+ cook
|= a=(list tile)
?~(a !! ?~(t.a i.a [i.a $(a t.a)]))
(most ace toil)
:- '_'
(stag %weed ;~(pfix cab wide))
:- ['0' '9']
(stag %leaf bisk:so)
:- ['a' 'z']
2013-12-15 09:07:33 +04:00
;~ pose
(stag %bark ;~(plug sym ;~(pfix tis toil)))
(stag %herb wide)
==
:- '$'
2013-12-15 09:07:33 +04:00
;~ pose
(noil |)
(stag %herb wide)
==
:- '|'
(stag %leaf (stag %f (cold | bar)))
:- '~'
(stag %leaf (stag %n (cold ~ sig)))
==
++ wart
2013-12-21 06:35:33 +04:00
|* zor=_rule
%+ here
2013-12-15 11:07:57 +04:00
|= [a=pint b=twig]
2013-09-29 00:21:18 +04:00
?:(bug [%zpcb [wer a] b] b)
zor
--
::
++ vest
~/ %vest
|= tub=nail
~| %vest
2013-12-15 11:07:57 +04:00
^- (like twig)
2013-09-29 00:21:18 +04:00
%. tub
%- full
(ifix [gay gay] tall:vast)
::
++ vice
|= txt=@ta
2013-12-15 11:07:57 +04:00
^- twig
2013-09-29 00:21:18 +04:00
(rash txt wide:vast)
--
:::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::: :::::: volume 3, Arvo models and skeleton ::::::
:::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
|%
++ curd ,[p=@tas q=*] :: typeless card
++ duct (list wire) :: causal history
++ helm :: privilege
$| ?(%gold %iron) :: root, user
$% [%lead p=ship] :: foreign
== ::
++ hilt ?(0 1 2) :: lead iron gold
++ move ,[p=(unit writ) q=duct r=curd] :: typeless move
++ ovum ,[p=wire q=curd] :: typeless ovum
++ pane (list ,[p=@tas q=vase]) :: kernel modules
++ pone (list ,[p=@tas q=vise]) :: kernel modules, old
++ ship ,@p :: network identity
2013-09-29 00:21:18 +04:00
++ vane $_ :: kernel actor
2013-12-16 05:15:04 +04:00
|+ [now=@da eny=@ sky=$+(* (unit))] :: activate
2013-09-29 00:21:18 +04:00
^? |% ::
++ beat :: update
|= $: wru=(unit writ) :: calling identity
pax=wire :: pretext
hen=duct :: channel
fav=curd :: event
== ::
:- p=*(list move) :: actions
q=*vane :: consequence
2014-01-06 05:52:37 +04:00
++ come :: load state, stale
|= [sam=? old=vase] ::
2013-09-29 00:21:18 +04:00
*vane ::
++ doze :: next wakeup
|= [now=@da hen=duct] :: channel
*(unit ,@da) :: alarm if any
2014-01-06 05:52:37 +04:00
++ load :: load state, fresh
|= old=vase ::
2013-09-29 00:21:18 +04:00
*vane ::
++ raze *vane :: erase all state
++ scry :: inspect
|= $: our=ship :: observer
ren=@tas :: submode
his=ship :: target
syd=@tas :: project
2013-09-29 00:21:18 +04:00
lot=coin :: version
tyl=path :: location
== ::
*(unit) :: record
++ stay *vase :: save state, new
2014-01-06 05:52:37 +04:00
++ vern [_@ud _@ud] :: hoon/vane version
2013-09-29 00:21:18 +04:00
-- ::
++ vile :: reflexive constants
$: bet=type :: beat
2013-09-29 00:21:18 +04:00
nim=type :: scry
vin=type :: vane
hoz=type :: doze
viz=type :: vane
==
++ wire path :: event pretext
++ writ ,[p=helm q=ship] :: authority
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 3bE, Arvo core ::
::
::
:: ++ able :: simplify privilege
:: |= hem=helm ^- hilt
:: ?-(hem %gold 2, %iron 1, [%lead *] 0)
::
++ adit :: duct privilege
|= hen=duct
^- ?(%gold %iron %lead)
?~ hen
%lead
?~ t.hen
?: ?=([%gold *] i.hen) %gold
?: ?=([%iron *] i.hen) %iron
%lead
$(hen t.hen)
::
++ vent :: vane core
2014-01-07 00:37:42 +04:00
!:
2013-09-29 00:21:18 +04:00
|= [vil=vile bud=vase ves=vase]
|%
++ ruck :: update vase
|= [pax=path txt=@ta]
^+ +>
=+ arg=`vase`[vin.vil ~2000.1.1 0 =>(~ |+(* ~))]
=+ rig=(slam ves arg)
=+ rev=(slam (slap bud (rain pax txt)) `vase`[viz.vil bud])
=+ syg=(slam rev arg)
2014-01-05 07:18:06 +04:00
=+ ole=(slap rig [%cnzy %stay])
2014-01-06 06:10:37 +04:00
=+ [vol=(slap rig [%cnzy %vern]) vew=(slap syg [%cnzy %vern])]
?> =(stub -.q.vew)
?: =(q.vol q.vew)
+>.$(ves (slam (slap syg [%cnzy %load]) ole))
=+ ^= sam
?: =(stub -.q.vol)
?>(=(+.q.vew +(((hard ,@) +.q.vol))) &)
?>(&(=(0 +.q.vew) =(-.q.vol +(stub))) |)
%= +>.$
ves (slam (slap syg [%cnzy %come]) (slop [[%cube sam %atom %f] sam] ole))
==
2013-09-29 00:21:18 +04:00
::
++ wink :: deploy
2013-12-16 05:15:04 +04:00
|= [now=@da eny=@ sky=$+(* (unit))]
2013-09-29 00:21:18 +04:00
=+ arg=`vase`[vin.vil +<]
=+ rig=(slam ves arg)
|%
2013-09-29 00:21:18 +04:00
++ beat
|= $: wru=(unit writ)
pax=wire
hen=duct
fav=curd
==
2013-12-15 09:07:33 +04:00
^- [p=(list move) q=_+>.^$]
2014-01-05 07:18:06 +04:00
=+ pro=(slam (slap rig [%cnzy %beat]) [bet.vil +<])
:- ((hard (list move)) q:(slap pro [%cnzy %p]))
=+ sev=(slap pro [%cnzy %q])
2013-09-29 00:21:18 +04:00
%= +>.^$
ves
?: &(=(-.q.ves -.q.sev) =(+>.q.ves +>.q.sev))
ves
2013-12-17 08:48:40 +04:00
sev(+<.q [_@da _@ =>(~ |+(* ~))]) :: cure memory leak
2013-09-29 00:21:18 +04:00
==
::
++ doze
|= [now=@da hen=duct]
^- (unit ,@da)
2014-01-05 07:18:06 +04:00
((hard (unit ,@da)) q:(slam (slap rig [%cnzy %doze]) [hoz.vil +<]))
2013-09-29 00:21:18 +04:00
::
++ scry
|= $: our=ship
ren=@tas
his=ship
syd=@tas
lot=coin
tyl=path
==
2014-01-05 07:18:06 +04:00
=+ pro=(slam (slap rig [%cnzy %scry]) [nim.vil +<])
2013-09-29 00:21:18 +04:00
((hard (unit)) q.pro)
--
--
::
++ vial :: vane tools
|= but=type
^- vile
=+ pal=|=(a=@t ^-(type (~(play ut but) (vice a))))
2013-12-17 08:48:40 +04:00
:* bet=(pal '_[(unit writ) wire duct curd]')
nim=(pal '_[ship @tas ship @tas coin path]')
vin=(pal '_[@da @ $+(* (unit))]')
hoz=(pal '_[@da duct]')
viz=(pal '_vase')
2013-09-29 00:21:18 +04:00
==
::
++ vint :: create vane
|= [vil=vile bud=vase pax=path txt=@ta] ::
(vent vil bud (slam (slap bud (rain pax txt)) [viz.vil bud]))
::
++ is :: operate in time
|= [eny=@ vil=vile bud=vase fan=(list ,[p=@tas q=vase])]
|_ now=@da
++ beck
2013-09-29 00:21:18 +04:00
|= wru=(unit writ)
|+ hap=*
^- (unit)
=> .(hap ((hard path) hap))
2013-12-24 00:49:15 +04:00
?. ?=([@ @ @ @ *] hap) ~
=+ :* hyr=(slay i.hap)
2013-09-29 00:21:18 +04:00
fal=(slay i.t.hap)
dyc=(slay i.t.t.hap)
ved=(slay i.t.t.t.hap)
2013-09-29 00:21:18 +04:00
:: ved=(slay i.t.hap)
:: fal=(slay i.t.t.hap)
:: dyc=(slay i.t.t.t.hap)
tyl=t.t.t.t.hap
==
?. ?=([~ %$ %tas @] hyr) ~
?. ?=([~ %$ %p @] fal) ~
?. ?=([~ %$ %tas @] dyc) ~
?. ?=(^ ved) ~
=+ his=`@p`q.p.u.fal
=> .(wru ?^(wru wru [~ u=[p=[%lead his] q=his]])) :: XX dubious
=+ dis=(end 3 1 q.p.u.hyr)
=+ rem=(rsh 3 1 q.p.u.hyr)
|- ^- (unit)
?~ fan ~
?. =(dis p.i.fan) $(fan t.fan)
%- scry:(wink:(vent vil bud q.i.fan) now (shax now) ..^$)
[q.u.wru rem his q.p.u.dyc u.ved tyl]
::
++ dink :: vase by char
|= din=@tas ^- vase
?~(fan !! ?:(=(din p.i.fan) q.i.fan $(fan t.fan)))
::
++ dint :: input to vane
|= hap=path ^- @tas
?+ hap !!
[@ %ames *] %a
[@ %batz *] %b
[@ %clay *] %c
[@ %sync *] %c
[@ %term *] %d
[@ %http *] %e
==
::
++ doos :: sleep until
|= hap=path ^- (unit ,@da)
(doze:(wink:(vent vil bud (dink (dint hap))) now 0 (beck ~)) now [hap ~])
::
++ hurl :: start loop no id
|= ovo=ovum
^- [p=(list ovum) q=(list ,[p=@tas q=vase])]
(kick [[~ [[(dint p.ovo) ~] p.ovo ~] q.ovo] ~])
::
++ hymn :: start loop with id
|= [who=ship ovo=ovum]
^- [p=(list ovum) q=(list ,[p=@tas q=vase])]
(kick [[[~ %iron who] [[(dint p.ovo) ~] p.ovo ~] q.ovo] ~])
::
++ kick :: complete loop
|= mor=(list move)
=| ova=(list ovum)
2013-10-09 11:13:08 +04:00
=+ rom=mor
2013-09-29 00:21:18 +04:00
|- ^- [p=(list ovum) q=(list ,[p=@tas q=vase])]
?~ mor
[(flop ova) fan]
:: ~& [%kick-move q.i.mor -.r.i.mor]
2013-10-09 11:13:08 +04:00
?. ?=(^ q.i.mor)
~& [%kick-flat -.r.i.mor]
~& [%kick-rom rom]
$(mor t.mor)
2013-09-29 00:21:18 +04:00
?~ t.q.i.mor
$(mor t.mor, ova [[i.q.i.mor r.i.mor] ova])
?> ?=(^ i.q.i.mor)
=- $(mor (weld p.nyx t.mor), fan q.nyx)
^= nyx
=+ naf=fan
|- ^- [p=(list move) q=_fan]
?~ naf [~ ~]
?. =(i.i.q.i.mor p.i.naf)
=+ tuh=$(naf t.naf)
[p.tuh [i.naf q.tuh]]
=+ ven=(vent vil bud q.i.naf)
=+ win=(wink:ven now (shax now) (beck p.i.mor))
=+ ^= yub
%- beat:win
[p.i.mor t.i.q.i.mor t.q.i.mor r.i.mor]
[p.yub [[p.i.naf ves:q.yub] t.naf]]
--
--
:::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::: :::::: Postface ::::::
:::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::
2014-01-06 02:10:49 +04:00
=+ pit=`vase`!>(.) ::
=+ bud=pit :: becomes tang
=+ vil=(vial p.bud) ::
2013-09-29 00:21:18 +04:00
=| eny=@ :: entropy
2014-01-06 02:10:49 +04:00
=| fan=(list ,[p=@tas q=vase]) ::
=| hom=path :: source path
2014-01-06 02:10:49 +04:00
=| haz=@uw :: hash
2013-09-29 00:21:18 +04:00
=< |%
2014-01-06 02:10:49 +04:00
++ come |= [@ (list ovum) pone] :: 11
2013-09-29 00:21:18 +04:00
^- [(list ovum) _+>]
~& %hoon-come
=^ rey +>+ (^come +<)
[rey +>.$]
++ keep |=(* (^keep ((hard ,[@da path]) +<))) :: 4
2014-01-06 02:10:49 +04:00
++ load |= [@ (list ovum) pane] :: 86
2013-09-29 00:21:18 +04:00
^- [(list ovum) _+>]
~& %hoon-load
=^ rey +>+ (^load +<)
[rey +>.$]
2014-01-06 04:02:34 +04:00
++ peek |=(* (^peek ((hard ,[@da path]) +<))) :: 87
2013-09-29 00:21:18 +04:00
++ poke |= * :: 42
^- [(list ovum) *]
=> .(+< ((hard ,[now=@da ovo=ovum]) +<))
?: ?=(%veer -.q.ovo)
[~ +>.$(+ (veer +.q.ovo))]
=^ ova +>+ (^poke now ovo)
|- ^- [(list ovum) *]
?~ ova
[~ +>.^$]
?: ?=(%veer -.q.i.ova)
$(ova t.ova, +>+.^$ (veer +.q.i.ova))
2014-01-06 03:38:34 +04:00
?: ?=(%vega -.q.i.ova)
(vega now t.ova (path +.q.i.ova))
2013-09-29 00:21:18 +04:00
=+(avo=$(ova t.ova) [[i.ova -.avo] +.avo])
++ wish |=(* (^wish ((hard ,@ta) +<))) :: 20
--
|%
++ come :: load incompatible
2014-01-06 02:10:49 +04:00
|= [yen=@ ova=(list ovum) nyf=pone]
2013-09-29 00:21:18 +04:00
^+ [ova +>]
2014-01-06 02:10:49 +04:00
(load yen ova (turn nyf |=([a=@tas b=vise] [a (slim b)])))
2013-09-29 00:21:18 +04:00
::
++ keep :: wakeup delay
|= [now=@da hap=path]
=> .(+< ((hard ,[now=@da hap=path]) +<))
(~(doos (is eny vil bud fan) now) hap)
::
++ load :: load compatible
2014-01-06 02:10:49 +04:00
|= [yen=@ ova=(list ovum) nyf=pane]
2013-09-29 00:21:18 +04:00
^+ [ova +>]
=: eny yen
fan nyf
==
|- ^+ [ova +>.^$]
?~ ova
[~ +>.^$]
?: ?=(%veer -.q.i.ova)
$(ova t.ova, +>.^$ (veer +.q.i.ova))
=+(avo=$(ova t.ova) [[i.ova -.avo] +.avo])
::
++ peek :: external inspect
2014-01-06 04:02:34 +04:00
|= [now=@da hap=path]
2013-09-29 00:21:18 +04:00
^- (unit)
2014-01-06 04:02:34 +04:00
?~ hap [~ stub]
2013-09-29 00:21:18 +04:00
((~(beck (is eny vil bud fan) now) ~) hap)
::
++ poke :: external apply
|= [now=@da ovo=ovum]
=. eny (mix eny (shax now))
2013-09-29 00:21:18 +04:00
^- [(list ovum) _+>]
=^ zef fan
(~(hurl (is eny vil bud fan) now) ovo)
[zef +>.$]
::
2014-01-06 03:38:34 +04:00
++ vega :: reboot kernel
|= [now=@da ova=(list ovum) hap=path]
^- [p=(list ovum) q=*]
=+ pax=(weld hap `path`[%hoon ~])
~& [%vega-start hap]
2014-01-06 04:02:34 +04:00
=+ src=((hard ,@t) (need (peek now cx/pax)))
2014-01-06 03:38:34 +04:00
=+ saz=(shax src)
=+ gen=(rain hap src)
2014-01-06 03:38:34 +04:00
~& %vega-parsed
=+ ken=.*(0 q:(~(mint ut %noun) %noun gen))
2014-01-06 04:36:29 +04:00
=+ ^= nex
=+ gat=.*(ken .*(ken [0 87]))
(need ((hard (unit ,@)) .*([-.gat [[now ~] +>.gat]] -.gat)))
~& [%vega-compiled stub nex]
?> (lte nex stub)
=+ gat=.*(ken .*(ken [0 ?:(=(nex stub) 86 11)]))
2014-01-06 03:38:34 +04:00
=+ sam=[eny ova fan]
=+ raw=.*([-.gat [sam +>.gat]] -.gat)
2014-02-15 05:35:22 +04:00
[[[~ %vega hap] ((list ovum) -.raw)] +.raw]
2014-01-06 03:38:34 +04:00
::
2013-09-29 00:21:18 +04:00
++ veer :: install vane/tang
|= *
=> .(+< ((hard ,[lal=@ta pax=path txt=@t]) +<))
?: =(%$ lal)
~& [%tang pax `@p`(mug txt)]
=+ gen=(rain pax txt)
2013-09-29 00:21:18 +04:00
=+ vax=(slap pit gen)
+>.$(bud vax)
%_ +>
fan
|- ^+ fan
?~ fan
2013-09-29 00:21:18 +04:00
~& [%vane `@tas`lal pax `@p`(mug txt)]
[[lal ves:(vint vil bud pax txt)] fan]
?. =(lal p.i.fan)
2013-09-29 00:21:18 +04:00
[i.fan $(fan t.fan)]
~& [%vane `@tas`lal pax `@p`(mug txt)]
[[p.i.fan ves:(ruck:(vent vil bud q.i.fan) pax txt)] t.fan]
==
::
++ wish :: external compute
|= txt=@
q:(slap bud (ream txt))
--
2014-01-04 11:28:16 +04:00
. ==