From 0afd6d85696c801535bb2ded89da311e443aecae Mon Sep 17 00:00:00 2001 From: XuJiazhi <9138382+jiafaCompiler@user.noreply.gitee.com> Date: Mon, 7 Jun 2021 19:40:38 +0800 Subject: [PATCH] add multiple arithmatic operator and multiple logical operator --- rlispy/__pycache__/eval.cpython-38.pyc | Bin 0 -> 6409 bytes rlispy/__pycache__/parse.cpython-38.pyc | Bin 0 -> 2263 bytes rlispy/eval.py | 57 ++++++++++++++++++++++-- rlispy/lis.py | 4 +- rlispy/parse.py | 2 +- 5 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 rlispy/__pycache__/eval.cpython-38.pyc create mode 100644 rlispy/__pycache__/parse.cpython-38.pyc diff --git a/rlispy/__pycache__/eval.cpython-38.pyc b/rlispy/__pycache__/eval.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d935b3a0bef6f278d0ddf54c4030f0198ede4c14 GIT binary patch literal 6409 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 literal 0 HcmV?d00001 diff --git a/rlispy/__pycache__/parse.cpython-38.pyc b/rlispy/__pycache__/parse.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a3cb4e3d360248511c09502f5f9c1ba002d6aa5b GIT binary patch literal 2263 zcmb7FUvCpf5Z}FjK09_W5Fmj-+(@nBs?a`EtyEBpR6+ZI+=oD+SES?OU59JVcV_Qg zh;@0ve1Lw0%{@O02*#Xb1K;OxVJC#e^fBsU5h|LGyx|^kscu z1r5ku;X&>h`BKb+rl<-36$@IjCF)ZiECUkS= zcoujOcn)|8cpkV4Tmh~DF90tCF9NTKOJWuKu8TEs8F*D(5$nKf;;Og?+z{3_>u&so z6SFSYzKDO0^EgX;eHvN(I6Ak{@+OF60T&D&;aF{HZ+m~ZlO?@lTl-;{Mnf5fx)FxM zOpFuan_>8D93_?Hm?X<~{hNnH!&kMYNMhV>SHC^M(CsYi+~0RnqE#Fz)jvSIZ=DpN+FZYAYU0oLm;~ zX-~*OoJ#E_(QrpZ+TD@6aXM*M!`FvVUuC)hH|KG+v^Gu+GilG5>-i{&`*FHEX~N_E zz3cMDNcM|)?|EE2g~HlU4tJ#bN_%;s#{J?QN01whBR&CBvO{Ewu#PMsvf{`(sK$^1 zW(;u;8_?+@I8y}P*_v`5;u8>fIi{}T-YT^ z?(eb#tHklvkm`H3x?5U@cHz*}VU%0Z2R_tGzy=PX{q5qFl`hS0|A6hZrC0plvENFIS znlIw~C`B)M>K9(gr$}i*7q!$=6!w$#aazTR6rDTY-R(So8Yi-&WF!zt>Jp|X3ShMc za>6_640SGpXx^AK7Z!KBHEky{)l1v^X%W4+qg1A}J<3Mfi$)`v3f(5P;Xq}>(A;gV zou9He)lO7o!>$*2vr*Te=J$d+mZ7##s!+Vbq`*(*^DsfGoQfCq0gU<#Ex!fAkZC?| zpgG{$;2dj#=gW}z7Dged7Hi;u7Fz~YBzxyDud5xE`vM0bvnVzyBPth|L{nEW ziK(fKE6UMsC%~&P7#CxOS3yxl*Orpn&i8YWLYX6I2Two|IQKx+N2L4)P4s$Ws!OI= zE3&Gpliuw1?Jyo_Cq${#wQyD{YvHU`dZ8(nc!w%URVTlnFUi;Wryz*4dK(evaNllQ Sj_tdM!T 1 and result == 0: + result = operand + else: result = result - operand + return result + +def _mul(*operands): + result = 1 + for operand in operands: + result = result * operand + return result + +def _truediv(*operands): + result = 1 + for operand in operands: + #first step in truediv, we need to let the first num in our operands tuple to be our dividend + if result == 1: + result = operand + else: result = result / operand + #and if divisor is 0, python will throw appropriate error to us + return result + +#define multiobjective logical operators here +def _and(*args): + result = True + for arg in args: + result = result and arg + return result + +def _or(*args): + result = False + for arg in args: + result = result or arg + return result # An environment with some Scheme standard procedures." def standard_env(): env = Env() env.update(vars(math)) env.update({ - '+':op.add, - '-':op.sub, - '*':op.mul, - '/':op.div, + '+':_add, + '-':_sub, + '*':_mul, + '/':_truediv, '>':op.gt, '<':op.lt, '>=':op.ge, '<=':op.le, '=':op.eq, + 'and':_and, + 'or':_or, 'abs': abs, 'append': op.add, 'apply': apply, diff --git a/rlispy/lis.py b/rlispy/lis.py index 1be99a0..29652e6 100644 --- a/rlispy/lis.py +++ b/rlispy/lis.py @@ -19,14 +19,14 @@ def repl(prompt='Code: '): print("Lispy Version 3.0\n Get Coding!\n") while True: - inpt = raw_input(prompt) + inpt = input(prompt) try: if inpt == "quit": break val = eval(parse(inpt)) if val is not None: print(schemestr(val)) except Exception as e: - print '%s: %s' % (type(e).__name__, e) + print ('%s: %s' % (type(e).__name__, e)) # Convert a Python object back into a Scheme-readable string. def schemestr(exp): diff --git a/rlispy/parse.py b/rlispy/parse.py index 09fdbc9..71e2a69 100644 --- a/rlispy/parse.py +++ b/rlispy/parse.py @@ -1,7 +1,7 @@ # Parsing Module from __future__ import division -import re, sys, StringIO +import re, sys # A Scheme List is implemented as a Python list # A Scheme Number is implemented as a Python int or float