;;; 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)) (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)))