1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-20 10:07:45 +03:00

Update apply-unwrapped-values to also wrap the result into a mal type

This commit is contained in:
Iqbal Ansari 2016-08-17 16:08:46 +05:30 committed by Iqbal Ansari
parent b15826e999
commit c9d4d92e8c
2 changed files with 24 additions and 13 deletions

View File

@ -14,27 +14,27 @@
(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)))

View File

@ -97,4 +97,15 @@
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)))