başlangıç, push pop + - . vb.
This commit is contained in:
47
util.lisp
Normal file
47
util.lisp
Normal file
@@ -0,0 +1,47 @@
|
||||
(in-package :cl-forth)
|
||||
|
||||
(eval-when (:compile-toplevel :load-toplevel :execute)
|
||||
(defmacro eval-always (&body body)
|
||||
`(eval-when (:compile-toplevel :load-toplevel :execute)
|
||||
,@body)))
|
||||
|
||||
(eval-always
|
||||
(defmacro with-gensyms (syms &body body)
|
||||
`(let ,(mapcar (lambda (sym) `(,sym (gensym ,(string sym)))) syms)
|
||||
,@body)))
|
||||
|
||||
(defmacro init-hash (&body body)
|
||||
(with-gensyms (table)
|
||||
`(let ((,table (make-hash-table)))
|
||||
,@(iter (for (k v) in body)
|
||||
(collect `(setf (gethash ',k ,table) ,v)))
|
||||
,table)))
|
||||
|
||||
(defun mklist (form)
|
||||
(if (listp form) form (list form)))
|
||||
|
||||
;; (defmacro run (args)
|
||||
;; (let ((sym (gensym)))
|
||||
;; `(let ((,sym ,args))
|
||||
;; (format t "~{~a~^ ~}~%" ,sym)
|
||||
;; (uiop:run-program ,sym))))
|
||||
|
||||
(defun run (args)
|
||||
(format t "~{~a~^ ~}~%" args)
|
||||
(uiop:run-program args :output *standard-output*))
|
||||
|
||||
;; ,(file-namestring
|
||||
;; (make-pathname :name (pathname-name path)
|
||||
;; :type "o"))
|
||||
|
||||
(defparameter *test-program*
|
||||
'((push 34)
|
||||
(push 35)
|
||||
(plus)
|
||||
(dump)
|
||||
(push 500)
|
||||
(push 80)
|
||||
(minus)
|
||||
(dump)))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user