;;; 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 (numberp x) (pushd fe x) (funcall x fe)))) (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)))