From 08f977324f96215302aad04dd21d0cab9daf22cd Mon Sep 17 00:00:00 2001 From: Simon Forman Date: Wed, 7 Sep 2022 20:33:13 -0700 Subject: [PATCH] Passes (updated) tests. https://git.sr.ht/~sforman/joytest --- implementations/Python/simplejoy.py | 181 +++++++++++++++++++----------------- 1 file changed, 98 insertions(+), 83 deletions(-) diff --git a/implementations/Python/simplejoy.py b/implementations/Python/simplejoy.py index 3224dca..9b34eeb 100755 --- a/implementations/Python/simplejoy.py +++ b/implementations/Python/simplejoy.py @@ -86,7 +86,7 @@ def isnt_stack(el): Raise NotAListError if el isn't a stack/quote/list. ''' if not isinstance(el, tuple): - raise NotAListError(f'Not a list {_s(el)}') + raise NotAListError(f'Not a list: {_s(el)}') ''' @@ -828,8 +828,11 @@ def pop(stack): ----------- ''' - _, s23 = get_n_items(1, stack) - return s23 + try: + _, stack = stack + except ValueError: + raise StackUnderflowError('Cannot pop empty stack.') from None + return stack @inscribe @@ -845,7 +848,10 @@ def rest(stack): ''' s0, stack = get_n_items(1, stack) isnt_stack(s0) - _, s1 = get_n_items(1, s0) + try: + _, s1 = s0 + except ValueError: + raise StackUnderflowError('Cannot take rest of empty list.') from None return s1, stack @@ -1074,6 +1080,16 @@ Start with increment and decrement: < ≡ lt >= ≡ ge <= ≡ le +!= ≡ ne +<> ≡ ne + +% ≡ mod ++ ≡ add +- ≡ sub +* ≡ mul +/ ≡ floordiv +div ≡ floordiv + ? ≡ dup bool @@ -1086,114 +1102,113 @@ 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 disenstacken -at drop first -average [sum] [size] cleave / -b [i] dip i -binary unary popd -ccccons ccons ccons -ccons cons cons -clear [] swaack pop +app3 ≡ 3 appN +appN ≡ [grabN] codi map 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 +clop ≡ cleave popdd +cmp ≡ [[>] swap] dipd [ifte] ccons [=] swons ifte codi ≡ cons dip -codireco codi reco -dinfrirst dip infrst +codireco ≡ codi reco +dinfrirst ≡ dip infrst dipd ≡ [dip] codi -disenstacken ? [uncons ?] loop pop -down_to_zero [0 >] [dup --] while -drop [rest] times +disenstacken ≡ ? [uncons ?] loop pop +down_to_zero ≡ [0 >] [dup --] while +drop ≡ [rest] times dupd ≡ [dup] dip -dupdd [dup] dipd +dupdd ≡ [dup] dipd dupdip ≡ dupd dip dupdipd ≡ dup dipd -enstacken stack [clear] dip -first uncons pop -flatten <{} [concat] step +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 +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 +ifte ≡ [nullary] dipd swap branch ii ≡ [dip] dupdip i infra ≡ swons swaack [i] dip swaack infrst ≡ infra first -make_generator [codireco] ccons +make_generator ≡ [codireco] ccons manual ≡ [] words [help] step pop -mod % -neg 0 swap - -not [true] [false] branch -nulco [nullary] cons -nullary [stack] dinfrirst -of swap at -pam [i] map -pm [+] [-] clop +neg ≡ 0 swap - +not ≡ [true] [false] branch +nulco ≡ [nullary] cons +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 <=] [1 - dup] anamorphism -range_to_zero unit [down_to_zero] infra -reco rest cons -rest uncons popd -reverse <{} shunt +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 +rest ≡ uncons popd +reverse ≡ <{} shunt roll> ≡ swap swapd roll< ≡ swapd swap -rollup roll> +rollup ≡ roll> rolldown roll< -rrest rest rest -run <{} infra -second rest first -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 +rrest ≡ rest rest +run ≡ <{} infra +second ≡ rest first +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 -tailrec [i] genrec -take <<{} [shift] times pop -ternary binary popd -third rest second -tuck dup swapd -unary nullary popd +swoncat ≡ swap concat +sqr ≡ dup mul +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 -unswons uncons swap -while swap nulco dupdipd concat loop +unquoted ≡ [i] dip +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 +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 ''' -- 2.11.0