nekomata / core /eval-loop.lisp
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/nekomata
3b70664 verified
Raw
History Blame Contribute Delete
1.05 kB
(in-package #:nekod)
;; The Nekomata eval loop — infrastructure as a read-eval-print loop
(defun nekod-eval (form)
"Evaluate an infrastructure form. Returns the result."
(typecase form
(container-spec form) ; Already a spec, return as-is
(symbol (if (boundp form) (symbol-value form) form))
(cons
(case (car form)
(define-container (eval form))
(with-failover (eval form))
(t (eval form))))
(t form)))
(defun nekod-repl ()
"Interactive REPL for Nekomata infrastructure management."
(format t "~&Nekomata ~a~%Type :quit to exit.~%nekod> " "0.1.0")
(finish-output)
(loop
(let ((form (read *standard-input* nil :eof)))
(when (eq form :eof) (return))
(when (eq form :quit) (return))
(handler-case
(let ((result (nekod-eval form)))
(format t "~&=> ~s~%nekod> " result)
(finish-output))
(nekomata-error (e)
(format t "~&Error: ~a~%nekod> " (error-message e))
(finish-output))))))