Arithmetic operations on lists
authorrayslava <rayslava@gmail.com>
Sat, 19 Jan 2013 19:27:18 +0000 (23:27 +0400)
committerrayslava <rayslava@gmail.com>
Sat, 19 Jan 2013 19:27:18 +0000 (23:27 +0400)
ecmalisp.lisp

index 7e3cda3..4d42329 100644 (file)
   (type-check (("x" "number" x) ("y" "number" y))
     (concat "x" op "y")))
 
-(define-builtin + (x y) (num-op-num x "+" y))
-(define-builtin - (x y) (num-op-num x "-" y))
-(define-builtin * (x y) (num-op-num x "*" y))
-(define-builtin / (x y) (num-op-num x "/" y))
+(defmacro define-builtin-arithmetic (op)
+`(define-raw-builtin ,op (&rest args)
+  (if args
+      (let ((res (ls-compile (car args))))
+       (dolist (x (cdr args))
+         (setq res (num-op-num res ,(symbol-name op) (ls-compile x))))
+       res)
+       "0")))
+
+(define-builtin-arithmetic +)
+(define-builtin-arithmetic -)
+(define-builtin-arithmetic *)
+(define-builtin-arithmetic /)
 
 (define-builtin mod (x y) (num-op-num x "%" y))