Start working on L2
This changes the compilation process to keep track of register types, which
we'll need to distinguish between local/permanent variables. It also makes
things a bit more obvious/safe when compiling argument registers because they're
tagged explicitly.
This also changes up the actual running of the code by actually using
CALL/PROCEED, though it's not fully fleshed out yet.
author |
Steve Losh <steve@stevelosh.com> |
date |
Wed, 13 Apr 2016 17:38:57 +0000 |
parents |
e29b793a6e91 |
children |
d16b5b360398 |
(defpackage #:bones
(:use #:cl)
(:export #:hello))
(defpackage #:bones.utils
(:use #:cl
#:defstar
#:bones.quickutils)
(:export
#:vector-push-extend-all
#:push-if-new))
(defpackage #:bones.wam
(:use #:cl
#:defstar
#:optima
#:cl-arrows
#:bones.quickutils
#:bones.utils)
(:import-from #:optima #:match)
(:shadowing-import-from #:cl-arrows #:->))
(defpackage #:bones.paip
(:use #:cl #:defstar #:bones.quickutils)
(:documentation "Test?")
(:export
;; Unification, constants
#:unify
#:fail #:no-bindings
#:*check-occurs*
;; Destructive unification
#:unify!
#:unbound
#:bound-p
;; Database management
#:clear-db
#:clear-predicate
#:fact
#:rule
#:add-fact
#:rule-fact
;; Lisp data structures as results
#:return-one
#:return-all
;; Interactive queries
#:query
#:query-one
#:query-all
))