Splice defs.txt into joy.py to make "joy" script.

This commit is contained in:
Simon Forman 2023-02-14 09:52:01 -08:00
parent ae77bbda24
commit 25c48e059b
2 changed files with 13 additions and 214 deletions

View File

@ -0,0 +1,8 @@
joy: joy.py ../defs.txt
split -p \'\'\'\.splitlines\(\) joy.py joy.py.
cat joy.py.aa ../defs.txt joy.py.ab > joy
chmod u+x joy
clean:
$(RM) -fv joy joy.py.*

View File

@ -52,220 +52,6 @@ This function accepts two integers on the stack and increments or
decrements one of them such that the new pair of numbers is the next decrements one of them such that the new pair of numbers is the next
coordinate pair in a square spiral (like the kind used to construct an coordinate pair in a square spiral (like the kind used to construct an
Ulam Spiral). Ulam Spiral).
Start with increment and decrement:
-- 1 -
++ 1 +
Common symbols for operations:
= eq
+ add
> gt
< lt
>= ge
<= le
!= ne
<> ne
% mod
+ add
- sub
* mul
/ floordiv
div floordiv
& and
| or
! not
<< lshift
>> rshift
? dup bool
&& nulco [nullary [false]] dip branch
|| nulco [nullary] dip [true] branch
!- 0 >=
<{} [] swap
<<{} [] rollup
abs dup 0 < [] [neg] branch
anamorphism [pop []] swap [dip swons] genrec
app1 grba infrst
app2 [grba swap grba swap] dip [infrst] cons ii
app3 3 appN
appN [grabN] codi map reverse disenstacken
at drop first
b [i] dip i
dipd [dip] codi
genrec [[genrec] ccccons] nullary swons concat ifte
tailrec [i] genrec
ifte [nullary] dipd swap branch
ii [dip] dupdip i
infra swons swaack [i] dip swaack
x dup i
pam [i] map
nullary [stack] dip infra first
unary nullary popd
binary unary popd
ternary binary popd
ccccons ccons ccons
ccons cons cons
clear [] swaack pop
cleave fork popdd
clop cleave popdd
fork [i] app2
cmp [[>] swap] dipd [ifte] ccons [=] swons ifte
codi cons dip
codireco codi reco
dinfrirst dip infrst
disenstacken ? [uncons ?] loop pop
enstacken stack [clear] dip
down_to_zero [0 >] [dup --] while
drop [rest] times
dupd [dup] dip
dupdd [dup] dipd
dupdip dupd dip
dupdipd dup dipd
rest uncons popd
first uncons pop
second rest first
third rest second
fourth rest third
flatten <{} [concat] step
gcd true [tuck mod dup 0 >] loop pop
grabN <{} [cons] times
grba [stack popd] dip
hypot [sqr] ii + sqrt
infrst infra first
make_generator [codireco] ccons
manual [] words [help] step pop
neg 0 swap -
not [true] [false] branch
nulco [nullary] cons
of swap at
over [dup] dip swap
pm [+] [-] clop
popd [pop] dip
popdd [pop] dipd
popop pop pop
popopop pop popop
popopd [popop] dip
popopdd [popop] dipd
product 1 swap [*] step
quoted [unit] dip
range [0 <=] [1 - dup] anamorphism
range_to_zero unit [down_to_zero] infra
reco rest cons
reverse <{} shunt
roll> swap swapd
roll< swapd swap
rollup roll>
rolldown roll<
rrest rest rest
run <{} infra
shift uncons [swons] dip
shunt [swons] step
size [pop ++] step_zero
spiral_next [[[abs] ii <=] [[<>] [pop !-] ||] &&] [[!-] [[++]] [[--]] ifte dip] [[pop !-] [--] [++] ifte] ifte
split_at [drop] [take] clop
split_list [take reverse] [drop] clop
sqr dup *
stackd [stack] dip
step_zero 0 roll> step
stuncons stack uncons
sum [+] step_zero
swapd [swap] dip
swons swap cons
swoncat swap concat
sqr dup mul
take <<{} [shift] times pop
tuck dup swapd
uncons [first] [rest] cleave
unit [] cons
unquoted [i] dip
unswons uncons swap
while swap nulco dupdipd concat loop
step [_step0] x
_step0 _step1 [popopop] [_stept] branch
_step1 [?] dipd roll<
_stept [uncons] dipd [dupdipd] dip x
times [_times0] x
_times0 _times1 [popopop] [_timest] branch
_times1 [dup 0 >] dipd roll<
_timest [[--] dip dupdipd] dip x
map [_map0] cons [[] [_map?] [_mape]] dip tailrec
_map? pop bool not
_mape popd reverse
_map0 [_map1] dipd _map2
_map1 stackd shift
_map2 [infrst] cons dipd roll< swons
''' '''
from functools import wraps from functools import wraps
from inspect import getdoc from inspect import getdoc
@ -273,6 +59,11 @@ from traceback import print_exc
import operator import operator
DEFS = '''
'''.splitlines()
''' '''