list reduction for basic arithmetic

master
cynic 3 years ago
parent 7c96340a6a
commit 291e61ed8d
  1. 11
      lib.py

@ -4,6 +4,7 @@
def execute(program): def execute(program):
import traceback, copy import traceback, copy
from functools import reduce
def _execute(ctx, ids): def _execute(ctx, ids):
import sys, functools import sys, functools
lids = copy.copy(ids) lids = copy.copy(ids)
@ -70,13 +71,13 @@ def execute(program):
ids[ctx[1]] = subs[2] ids[ctx[1]] = subs[2]
return ids[ctx[1]] return ids[ctx[1]]
elif ctx[0] == _ident("+"): elif ctx[0] == _ident("+"):
return (subs[1][0], subs[1][1]+subs[2][1]) return reduce(lambda a, b: (a[0], a[1]+b[1]), subs[1:])
elif ctx[0] == _ident("-"): elif ctx[0] == _ident("-"):
return (subs[1][0], subs[1][1]-subs[2][1]) return reduce(lambda a, b: (a[0], a[1]-b[1]), subs[1:])
elif ctx[0] == _ident("*"): elif ctx[0] == _ident("*"):
return (subs[1][0], subs[1][1]*subs[2][1]) return reduce(lambda a, b: (a[0], a[1]*b[1]), subs[1:])
elif ctx[0] == _ident("/"): elif ctx[0] == _ident("/"):
return (subs[1][0], subs[1][1]/subs[2][1]) return reduce(lambda a, b: (a[0], a[1]/b[1]), subs[1:])
elif ctx[0] == _ident("%"): elif ctx[0] == _ident("%"):
return (subs[1][0], subs[1][1]%subs[2][1]) return (subs[1][0], subs[1][1]%subs[2][1])
elif ctx[0] == _ident("!"): elif ctx[0] == _ident("!"):
@ -123,7 +124,7 @@ def execute(program):
try: _execute(strand, idspace) try: _execute(strand, idspace)
# _execute(strand) # _execute(strand)
except Exception as e: except Exception as e:
print("failed in", strand, "with", e) print("failed in top-level", strand, "with", e)
_execute(strand, idspace) _execute(strand, idspace)
#input() #input()

Loading…
Cancel
Save