Update apply-unwrapped-values to also wrap the result into a mal type
authorIqbal Ansari <iqbal.ansari@ignitesol.com>
Wed, 17 Aug 2016 10:38:46 +0000 (16:08 +0530)
committerIqbal Ansari <iqbalansari02@yahoo.com>
Sat, 27 Aug 2016 12:43:33 +0000 (18:13 +0530)
common_lisp/step2_eval.lisp
common_lisp/types.lisp

index 4c3a63a..8a4e41d 100644 (file)
 
 (setf (gethash (types:make-mal-symbol '+) *repl-env*)
       (types:make-mal-builtin-fn (lambda (value1 value2)
-                             (types:make-mal-number (apply-unwrapped-values '+
-                                                                            value1
-                                                                            value2)))))
+                                   (apply-unwrapped-values '+
+                                                           value1
+                                                           value2))))
 
 (setf (gethash (types:make-mal-symbol '-) *repl-env*)
       (types:make-mal-builtin-fn (lambda (value1 value2)
-                                   (types:make-mal-number (apply-unwrapped-values '-
-                                                                                  value1
-                                                                                  value2)))))
+                                   (apply-unwrapped-values '-
+                                                           value1
+                                                           value2))))
 
 (setf (gethash (types:make-mal-symbol '*) *repl-env*)
       (types:make-mal-builtin-fn (lambda (value1 value2)
-                                   (types:make-mal-number (apply-unwrapped-values '*
-                                                                                  value1
-                                                                                  value2)))))
+                                   (apply-unwrapped-values '*
+                                                           value1
+                                                           value2))))
 
 (setf (gethash (types:make-mal-symbol '/) *repl-env*)
       (types:make-mal-builtin-fn (lambda (value1 value2)
-                                   (types:make-mal-number (apply-unwrapped-values '/
-                                                                                  value1
-                                                                                  value2)))))
+                                   (apply-unwrapped-values '/
+                                                           value1
+                                                           value2))))
 
 (defun lookup-env (symbol env)
   (let ((value (gethash symbol env)))
index b97ae8c..faa3982 100644 (file)
                  forms))))
 
 (defun apply-unwrapped-values (op &rest values)
-  (apply op (mapcar #'mal-value values)))
+  (let ((value (apply op (mapcar #'mal-value values))))
+    (funcall (typecase value
+               (number #'make-mal-number)
+               (symbol #'make-mal-number)
+               (keyword #'make-mal-keyword)
+               (string #'make-mal-string)
+               (boolean #'make-mal-boolean)
+               (list #'make-mal-list)
+               (vector #'make-mal-vector)
+               (hash-map #'make-mal-hash-map)
+               (null #'make-mal-nil))
+             value)))