;; -*- Mode: Lisp; -*- ;; --------------------------------------------------------------------------- ;; Title: My idea of global variables ;; Created: 2020-05-25 ;; Author: Gilbert Baumann ;; --------------------------------------------------------------------------- ;; (c) copyright 2020 by Gilbert Baumann (defpackage :bauhh-global (:use :common-lisp) (:export #:defgobal)) (in-package :bauhh-global) (defmacro defglobal (symbol &optional (init nil initp) documentation) `(progn (define-symbol-macro ,symbol (symbol-value ',symbol)) ,@(and initp (list `(unless (boundp ',symbol) (set ',symbol ,init)))) ,@(and documentation (list `(setf (documentation ',symbol 'variable) ,documentation))) ',symbol)) (defglobal -bar- :global-value-of-bar) (defun foo () (let ((-bar- :foo-value-of-bar)) (list -bar- (bar)))) (defun bar () -bar-) ;; ;; (FOO) => (:FOO-VALUE-OF-BAR :GLOBAL-VALUE-OF-BAR) ;;