diff --git a/implementations/Python/Makefile b/implementations/Python/Makefile index d52e7f5..baac542 100644 --- a/implementations/Python/Makefile +++ b/implementations/Python/Makefile @@ -1,8 +1,13 @@ -# split on Ubuntu doesn't have '-p' option! Wah! -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 +SHELL != which python +.ONESHELL: + +joy: joy.py ../defs.txt + from pathlib import Path + SPLIT_PATTERN = "'''.splitlines()\n" + joy_source = Path('joy.py').read_text() + defs_source = Path('../defs.txt').read_text() + head, sep, tail = joy_source.partition(SPLIT_PATTERN) + joy = Path('joy') + joy.write_text(''.join((head, defs_source, sep, tail))) + joy.chmod(0o775) -clean: - $(RM) -fv joy joy.py.* diff --git a/implementations/Python/joy.py b/implementations/Python/joy.py old mode 100755 new mode 100644 index 20242bd..9cfab99 --- a/implementations/Python/joy.py +++ b/implementations/Python/joy.py @@ -61,138 +61,7 @@ import operator DEFS = '''\ -eq [false] [true] [false] cmp -gt [true] [false] [false] cmp -lt [false] [false] [true] cmp -neq [true] [false] [true] cmp -le [false] [true] [true] cmp -ge [true] [true] [false] cmp --- 1 - -? dup bool -and nulco [nullary [false]] dip branch -++ 1 + -or 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 -average [sum] [size] cleave / -b [i] dip i -binary unary popd -ccccons ccons ccons -ccons cons cons -clear [] swaack pop -cleave fork popdd -clop cleave popdd -cmp [[>] swap] dipd [ifte] ccons [=] swons ifte -codi cons dip -codireco codi reco -dinfrirst dip infrst -dipd [dip] codi -disenstacken swaack pop -divmod [/] [%] clop -down_to_zero [0 >] [dup --] while -drop [rest] times -dupd [dup] dip -dupdd [dup] dipd -dupdip dupd dip -dupdipd dup dipd -enstacken stack [clear] dip -first uncons pop -flatten <{} [concat] step -fork [i] app2 -fourth rest third -gcd true [tuck mod dup 0 >] loop pop -genrec [[genrec] ccccons] nullary swons concat ifte -grabN <{} [cons] times -grba [stack popd] dip -hypot [sqr] ii + sqrt -ifte [nullary] dipd swap branch -ii [dip] dupdip i -infra swons swaack [i] dip swaack -infrst infra first -make_generator [codireco] ccons -mod % -neg 0 swap - -not [true] [false] branch -nulco [nullary] cons -null [] concat bool not -nullary [stack] dinfrirst -of swap at -pam [i] map -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 <=] [-- dup] anamorphism -range_to_zero unit [down_to_zero] infra -reco rest cons -rest uncons popd -reverse <{} shunt -roll> swap swapd -roll< swapd swap -rollup roll> -rolldown roll< -rrest rest rest -run <{} infra -second rest first -shift uncons [swons] dip -shunt [swons] step -size [pop ++] step_zero -small dup null [rest null] [pop true] branch -spiral_next [[[abs] ii <=] [[<>] [pop !-] or] and] [[!-] [[++]] [[--]] ifte dip] [[pop !-] [--] [++] ifte] ifte -split_at [drop] [take] clop -split_list [take reverse] [drop] clop -sqr dup mul -stackd [stack] dip -step_zero 0 roll> step -stuncons stack uncons -sum [+] step_zero -swapd [swap] dip -swons swap cons -swoncat swap concat -tailrec [i] genrec -take <<{} [shift] times pop -ternary binary popd -third rest second -tuck dup swapd -unary nullary popd -uncons [first] [rest] cleave -unit [] cons -unquoted [i] dip -unstack [[] swaack] dip swoncat swaack pop -unswons uncons swap -while swap nulco dupdipd concat loop -x dup i -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 -_\/_ [not not] [not] branch -/\ [not not] ii [pop false] [] branch -\/ [not not] ii [] [pop true] branch'''.splitlines() - +'''.splitlines() '''