K3OVRFE3Y23DN47XNAISH6XM5JGSCNRR6TOEO5KAKBNB54MFO27AC UNG2I2YG7NASZK7A2UYXTBYEM6RCMAU3BD4C57RUQKHNZQUTGIIAC O6PFGAUDYCMK6SC6V5RB5ELXZ7W54OB7XPYCMECCA4BSBUVLFAPAC UW27LKXM2BJ77FQLTY4WPKDSSWI2RFNFRJ7CB4U3TS7KYVIV72LQC RXKXDAF3GEASFJBBXAMTGPMPTHL74ZOHVBKVZ2YQXAZKMHISRY7QC A2JAXDJWT2FAKADYOY6QOQ7LQRMTTCDIOYT7STSESVHLZQEQJBMAC KMV35KHLCXIV5YQUDRSTS6PIMLNIL2KTJZS77XXMPA6IX37NHZ2QC 6XHALMLUA5B5BBYFSWIFHSJ2BXCL6RSAW5TCKRGJEI2LURH2TQ4AC GW4AAYNF7I66D72G5PMFTQRK7B4KZVYKAHKRPC2IY7IX37JKEHJQC lisp_eval_should_be '(+ 1 2 3)' '6' 'multiarg +'lisp_eval_should_be '(* 2 3 5)' '30' 'multiarg *'lisp_eval_should_be '(/ 3 5)' '0.6' '/'lisp_eval_should_be '(// 6 5)' '1' 'quotient'lisp_eval_should_be '(% 6 5)' '1' 'modulo'lisp_eval_should_be '(** 3 4)' '81' 'power'lisp_eval_should_be '(atan2 0 -1)' '3.14159' 'atan2'
(setq only2- (lambda (a b) (only2- a b))) \(setq - (lambda xs (reduce only2- xs))) \(setq only2/ (lambda (a b) (only2/ a b))) \(setq / (lambda xs (reduce only2/ xs))) \(setq only2// (lambda (a b) (only2// a b))) \(setq // (lambda xs (reduce only2// xs))) \(setq only2% (lambda (a b) (only2% a b))) \(setq % (lambda xs (reduce only2% xs))) \(setq only2** (lambda (a b) (only2** a b))) \(setq ** (lambda xs (reduce only2** xs))) \(setq atan2 (lambda (a b) (atan2 a b))) \(setq string-length (lambda (x) (string-length x))) \
function _only2_add(a, b, tv) {split(a, tv)if(tv[1] == "#") {a = tv[2]split(b, tv)if(tv[1] == "#") {b = tv[2]return _number(a+b)}}# if either a or b was not a number, we're herelogg_err("_only2_add", "non-numeric operand", d)return _nil()}function _only2_multiply(a, b, tv) {split(a, tv)if(tv[1] == "#") {a = tv[2]split(b, tv)if(tv[1] == "#") {b = tv[2]return _number(a*b)}}# if either a or b was not a number, we're herelogg_err("_only2_multiply", "non-numeric operand", d)return _nil()}function _only2_subtract(a, b, tv) {split(a, tv)if(tv[1] == "#") {a = tv[2]split(b, tv)if(tv[1] == "#") {b = tv[2]return _number(a-b)}}# if either a or b was not a number, we're herelogg_err("_only2_subtract", "non-numeric operand", d)return _nil()}function _only2_divide(a, b, tv) {split(a, tv)if(tv[1] == "#") {a = tv[2]split(b, tv)if(tv[1] == "#") {b = tv[2]if(b==0) {logg_err("_only2_divide", "divide by zero", d)return _nil()}return _number(a/b)}}# if either a or b was not a number, we're herelogg_err("_only2_divide", "non-numeric operand", d)return _nil()}function _only2_quotient(a, b, tv) {split(a, tv)if(tv[1] == "#") {a = tv[2]split(b, tv)if(tv[1] == "#") {b = tv[2]if(b==0) {logg_err("_only2_quotient", "quotient by zero", d)return _nil()}return _number(int(a/b))}}# if either a or b was not a number, we're herelogg_err("_only2_quotient", "non-numeric operand", d)return _nil()}function _only2_modulo(a, b, tv) {split(a, tv)if(tv[1] == "#") {a = tv[2]split(b, tv)if(tv[1] == "#") {b = tv[2]if(b==0) {logg_err("_only2_modulo", "modulo by zero", d)return _nil()}return _number(a%b)}}# if either a or b was not a number, we're herelogg_err("_only2_modulo", "non-numeric operand", d)return _nil()}function _only2_power(a, b, tv) {split(a, tv)if(tv[1] == "#") {a = tv[2]split(b, tv)if(tv[1] == "#") {b = tv[2]return _number(a^b)}}# if either a or b was not a number, we're herelogg_err("_only2_power", "non-numeric operand", d)return _nil()}function _atan2(a, b, tv) {split(a, tv)if(tv[1] == "#") {a = tv[2]split(b, tv)if(tv[1] == "#") {b = tv[2]return _number(atan2(a,b))}}# if either a or b was not a number, we're herelogg_err("_atan2", "non-numeric operand", d)return _nil()}
} else if(car == _symbol("only2+")) {a = _eval3(_cadr(form), env, env, d+1)b = _eval3(_caddr(form), env, env, d+1)logg_dbg("_eval3 only2+", "adding " a " and " b, d)split(a, tv)if(tv[1] == "#") {a = tv[2]split(b, tv)if(tv[1] == "#") {b = tv[2]return _number(a+b)}}# if either a or b was not a number, we're herelogg_err("_eval3 only2+", "non-numeric operand", d)return _nil()} else if(car == _symbol("only2*")) {a = _eval3(_cadr(form), env, env, d+1)b = _eval3(_caddr(form), env, env, d+1)logg_dbg("_eval3 only2*", "multiplying " a " and " b, d)split(a, tv)if(tv[1] == "#") {a = tv[2]split(b, tv)if(tv[1] == "#") {b = tv[2]return _number(a*b)}}# if either a or b was not a number, we're herelogg_err("_eval3 only2*", "non-numeric operand", d)return _nil()} else if(car == _symbol("gc"))
} else if(car == _symbol("only2+"))return _only2_add(_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1))else if(car == _symbol("only2*"))return _only2_multiply(_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1))else if(car == _symbol("only2-"))return _only2_subtract(_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1))else if(car == _symbol("only2/"))return _only2_divide(_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1))else if(car == _symbol("only2//"))return _only2_quotient( \_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1))else if(car == _symbol("only2%"))return _only2_modulo(_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1))else if(car == _symbol("only2**"))return _only2_power(_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1))else if(car == _symbol("atan2"))return _atan2(_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1))else if(car == _symbol("gc"))