cl-scopes/forge/forge.lisp

36 lines
663 B
Common Lisp

;;; cl-scopes/forge - may the forge be with you!
;;;; A Forth-like interpreter implemented in Common Lisp.
(defpackage :scopes/forge
(:use :common-lisp)
(:export #:new-forge-env #:data-stack #:exec
#:add))
(in-package :scopes/forge)
(defun new-forge-env ()
(vector nil))
(defun exec (fe code)
(dolist (x code)
(if (symbolp x)
(funcall (find-symbol (symbol-name x) :scopes/forge) fe)
(pushd fe x))))
(defmacro data-stack (fe)
`(elt ,fe 0))
; forge primitives
(defun add (fe)
(pushd fe (+ (popd fe) (popd fe))))
; internal definitions
(defun popd (fe)
(pop (data-stack fe)))
(defun pushd (fe v)
(push v (data-stack fe)))