diff --git a/implementations/Python/Makefile b/implementations/Python/Makefile new file mode 100644 index 0000000..2690329 --- /dev/null +++ b/implementations/Python/Makefile @@ -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.* diff --git a/implementations/Python/joy.py b/implementations/Python/joy.py index 96632d9..6277707 100755 --- a/implementations/Python/joy.py +++ b/implementations/Python/joy.py @@ -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 coordinate pair in a square spiral (like the kind used to construct an 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 inspect import getdoc @@ -273,6 +59,11 @@ from traceback import print_exc import operator +DEFS = ''' +'''.splitlines() + + + ''' ██╗███╗ ██╗████████╗███████╗██████╗ ██████╗ ██████╗ ███████╗████████╗███████╗██████╗ ██║████╗ ██║╚══██╔══╝██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔════╝╚══██╔══╝██╔════╝██╔══██╗