brainflak←{⍝ set up stacksstks←(⌽⍺)⍬⍝ get the first command from a stringgetfst←{bgns←'([<{'ends←')]>}'cmd←⊃⍵idx←((+\cmd=⍵)-+\ends[bgns⍳cmd]=⍵)⍳0(⊂idx↑⍵),⊂idx↓⍵}⍝ evaluate list of commandsevallst←{0=⍴⍵:0restval←eval⍵val+∇rest}⍝ evaluate codeeval←{⍝ nilad?nilad←2↑⍵rest←2↓⍵'()'≡nilad:(⊂rest),1'[]'≡nilad:(⊂rest),¯1'{}'≡nilad:(⊂rest),{item←⊃⊃⊃stksstks[1]↓⍨←1item}⍬'<>'≡nilad:(⊂rest),0⊣stks⌽⍨←1⍝ monads: get inner commandcmdrest←getfst⍵inner←1↓¯1↓cmd⍝ evaluate command'('=⊃cmd:(⊂rest),stks[1],⍨←evallstinner'['=⊃cmd:(⊂rest),+⎕←evallstinner'{'=⊃cmd:(⊂rest),{0≠⊃⊃⊃stks:∇evallstinner⋄0}⍬'<':⊃cmd:(⊂rest),0⊣evallstinner⍝ error('INVALID CMD: ',⊃cmd)⎕SIGNAL11}⍝ evaluate all the commands in order_←evallst⍵⍝ print active stack⎕←⍪⊃stks}
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.