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:
parent
b15826e999
commit
c9d4d92e8c
@ -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)))
|
||||
|
@ -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)))
|
||||
|
Loading…
Reference in New Issue
Block a user