lambda/examples/bf_cbn.λ
2024-04-09 13:40:20 +03:00

21 lines
1.2 KiB
Plaintext

:Mem ^cur ^lft ^rgt \op $op $cur $lft $rgt
:State ^mem ^in ^out \op $op $mem $in $out
:Cons ^head ^tail \op $op $head $tail
:Instrs ^head ^tail \df \op $op $head $tail
:Instop \df \op $df
:Y \g (\x $x $x) \x $g ($x $x)
:fold $Y \fold \instrs \state $instrs $state \xhead \xtail $fold $xtail ($xhead $state)
:succ \n = 255 $n 0 (+ 1 $n)
:pred \n = 0 $n 255 (- 1 $n)
:< \state $state \mem \in \out $mem \cur \lft \rgt $lft \lhead \ltail $State ($Mem $lhead $ltail ($Cons $cur $rgt)) $in $out
:> \state $state \mem \in \out $mem \cur \lft \rgt $rgt \rhead \rtail $State ($Mem $rhead ($Cons $cur $lft) $rtail) $in $out
:+ \state $state \mem \in \out $mem \cur \lft \rgt $State ($Mem ($succ $cur) $lft $rgt) $in $out
:- \state $state \mem \in \out $mem \cur \lft \rgt $State ($Mem ($pred $cur) $lft $rgt) $in $out
:. \state $state \mem \in \out $mem \cur \lft \rgt $State $mem $in ($Cons $cur $out)
:, \state $state \mem \in \out $mem \cur \lft \rgt $in \ihead \itail $State ($Mem $ihead $lft $rgt) $itail $out
:[] \instrs ($Y \fp \state $state \mem \in \out $mem \cur \lft \rgt = 0 $cur $state ($fp ($fun $state))) |fun $fold $instrs
:inf $Y \inf \op $op 0 $inf
:run \instrs \in ($fold $instrs ($State ($Mem 0 $inf $inf) $in ...)) \mem \in \out $out