;;; 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) (defclass forge-env () ((data-stack :initform nil :reader data-stack :accessor data-stack!))) (defun new-forge-env () (make-instance 'forge-env)) (defun exec (fe code) (dolist (x code) (if (symbolp x) (funcall (find-symbol (symbol-name x) :scopes/forge) fe) (pushd fe x)))) ; 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)))