From 848160c2dea62a229c0d15f3a5a064cc8e5c896f Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 26 Apr 2024 13:11:21 +0200 Subject: [PATCH] forge: provide a simple REPL --- forge/forge.lisp | 9 ++++++++- scratch.lisp | 12 ++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/forge/forge.lisp b/forge/forge.lisp index 1703c5c..a05fd12 100644 --- a/forge/forge.lisp +++ b/forge/forge.lisp @@ -4,7 +4,7 @@ (defpackage :scopes/forge (:use :common-lisp) - (:export #:forge-env #:data-stack #:exec #:exec-str)) + (:export #:forge-env #:data-stack #:exec #:exec-str #:repl)) (in-package :scopes/forge) @@ -42,6 +42,10 @@ (let ((v (gethash k voc))) (if v (return v)))))) +(defun repl (fe) + (do ((input (read-line) (read-line))) ((string= input "q") nil) + (exec-str fe input))) + ; built-in primitives (defun reg-b (key fn) (register *builtins* key fn)) @@ -51,6 +55,9 @@ (reg-b "dup" #'(lambda (fe) (pushd fe (car (data-stack fe))))) +(reg-b "?" #'(lambda (fe) (format t "~a~%" (popd fe)))) +(reg-b "??" #'(lambda (fe) (format t "~a~%" (data-stack fe)))) + (reg-b "def" #'(lambda (fe) (let ((voc (car(vocabulary fe))) (name (popd fe)) diff --git a/scratch.lisp b/scratch.lisp index cb8c6c0..4ec3ef6 100644 --- a/scratch.lisp +++ b/scratch.lisp @@ -1,3 +1,15 @@ +;;; cl-scopes/scratch - interactive testing + +(asdf:load-system :scopes) + +(in-package :cl-user) +(ext:add-package-local-nickname :scf :scopes/forge) +(ext:add-package-local-nickname :sctf :scopes/test-forge) + +(scopes/test-forge:run) + + +;;; real scratch area (defun classes () (let ((r nil))