This page is about possibilities for using the CL package system within the Maxima implementation. For some ideas about a user-level package system, see User-level namespaces in Maxima.


To begin with, here are links to previous discussions from the Maxima mailing list, in chronological order. Feel free to add more.

This email includes a partial implimentation:

  1. Yasuaki Honda's maxima-user work

Other discussion: (Be sure to check for other emails in the linked threads)

  1. using common lisp packages to avoid re-definitions/ powerset
  2. Re: set.lisp redefines POWERSET / {} for sets
  3. Re: set.lisp redefines POWERSET / {} for sets
  4. How to decide what to kill
  5. How to decide what to kill / packages
  6. How to decide what to kill / packages
  7. How to decide what to kill / packages
  8. How to decide what to kill / packages
  9. How to decide what to kill / packages
  10. Protecting variables
  11. common lisp package system
  12. Case-sensitivity goals, policy and implementation
  13. Re: packages, objection orientation, list of functions (was case
  14. Re: Case-sensitivity goals, policy and implementation

More recently, the issue was raised here:

  1. Suggestion for focus of 5.9.3 release

It was concluded it would be a good idea to have discussions centralized in one location, and this page seems to be the logical choice.

So it exists somewhere, here is some (rather elementary) preliminary work. It would probably be better to polish up the maxima-user work that has already been done, but this is quick and (in theory) works perfectly for what I (CY) have in mind:

;; This set of commands makes EVERY symbol in MAXIMA
;; external, and then defines a maxima-user package
;; which imports all of them.  Basically, we just
;; cloned MAXIMA.  By itself, this isn't very exciting,
;; but it sets the stage for things to come.

(do-symbols (s (find-package "MAXIMA")) (export s "MAXIMA"))
(defpackage :maxima-user
  (:use :maxima))


;; Now we get slightly more interesting:

(defpackage :maxima-declarations
  (:use :maxima))

(defpackage :maxima-destructuring-let
  (:use :maxima))

(defpackage :maxima-compatibility-macros1
  (:use :maxima))

(defpackage :maxima-compatibility-macros
  (:use :maxima))

(defpackage :maxima-prerequisites
  (:use :maxima))

;; This one is apparently already defined
;;(defpackage :maxima-command-line
;;  (:use :maxima))

(defpackage :maxima-fundamental-macros
  (:use :maxima))

(defpackage :maxima-utility-macros
  (:use :maxima))

(defpackage :maxima-other-macros
  (:use :maxima))

(defpackage :maxima-rat-macros
  (:use :maxima))

(defpackage :maxima-numerical-macros
  (:use :maxima))

(defpackage :maxima-commands
  (:use :maxima))

(defpackage :maxima-evaluator
  (:use :maxima))

(defpackage :maxima-numerical
  (:use :maxima))

(defpackage :maxima-simplification
  (:use :maxima))

(defpackage :maxima-server
  (:use :maxima))

(defpackage :maxima-i-o
  (:use :maxima))

(defpackage :maxima-factoring
  (:use :maxima))

(defpackage :maxima-rational-functions
  (:use :maxima))

(defpackage :maxima-language-compiler-macros
  (:use :maxima))

(defpackage :maxima-language-compiler
  (:use :maxima))

(defpackage :maxima-numerical-functions
  (:use :maxima))

(defpackage :maxima-reader
  (:use :maxima))

(defpackage :maxima-display
  (:use :maxima))

(defpackage :maxima-gcd
  (:use :maxima))

(defpackage :maxima-documentation
  (:use :maxima))

(defpackage :maxima-algebraic-database
  (:use :maxima))

(defpackage :maxima-integration
  (:use :maxima))

(defpackage :maxima-definite-integration
  (:use :maxima))

(defpackage :maxima-taylor-series
  (:use :maxima))

(defpackage :maxima-trigonometry
  (:use :maxima))

(defpackage :maxima-special-functions
  (:use :maxima))

(defpackage :maxima-matrix-algebra
  (:use :maxima))

(defpackage :maxima-determinants
  (:use :maxima))

(defpackage :maxima-pattern-matching
  (:use :maxima))

(defpackage :maxima-limits
  (:use :maxima))

(defpackage :maxima-solve
  (:use :maxima))

(defpackage :maxima-debugging
  (:use :maxima))

(defpackage :maxima-miscellaneous
  (:use :maxima))

(defpackage :maxima-poisson-series
  (:use :maxima))

(defpackage :maxima-sets
  (:use :maxima))

(defpackage :maxima-fortran
  (:use :maxima))

(defpackage :maxima-ordinary-differential-equations
  (:use :maxima))

(defpackage :maxima-laplace
  (:use :maxima))

(defpackage :maxima-TeX
  (:use :maxima :common-lisp)
  (:shadow common-lisp:tan common-lisp:tanh common-lisp:continue
           common-lisp:gcd common-lisp:signum common-lisp:complement
           common-lisp:cosh common-lisp:array common-lisp:asinh
           common-lisp:sinh common-lisp:functionp common-lisp:acosh
           common-lisp:float common-lisp:atan common-lisp:exp
           common-lisp:acos common-lisp:makunbound common-lisp://
           common-lisp:atanh common-lisp:asin common-lisp:listen
           common-lisp:break))

(defpackage :maxima-plotting
  (:use :maxima))

(defpackage :maxima-initialization
  (:use :maxima))

(use-package :maxima-declarations :maxima-user)
(use-package :maxima-destructuring-let :maxima-user)
(use-package :maxima-compatibility-macros1 :maxima-user)
(use-package :maxima-compatibility-macros :maxima-user)
(use-package :maxima-prerequisites :maxima-user)
;;(use-package :maxima-command-line :maxima-user)
(use-package :maxima-fundamental-macros :maxima-user)
(use-package :maxima-utility-macros :maxima-user)
(use-package :maxima-other-macros :maxima-user)
(use-package :maxima-rat-macros :maxima-user)
(use-package :maxima-numerical-macros :maxima-user)
(use-package :maxima-commands :maxima-user)
(use-package :maxima-evaluator :maxima-user)
(use-package :maxima-numerical :maxima-user)
(use-package :maxima-simplification :maxima-user)
(use-package :maxima-server :maxima-user)
(use-package :maxima-i-o :maxima-user)
(use-package :maxima-factoring :maxima-user)
(use-package :maxima-rational-functions :maxima-user)
(use-package :maxima-language-compiler-macros :maxima-user)
(use-package :maxima-language-compiler :maxima-user)
(use-package :maxima-numerical-functions :maxima-user)
(use-package :maxima-reader :maxima-user)
(use-package :maxima-display :maxima-user)
(use-package :maxima-gcd :maxima-user)
(use-package :maxima-documentation :maxima-user)
(use-package :maxima-algebraic-database :maxima-user)
(use-package :maxima-integration :maxima-user)
(use-package :maxima-definite-integration :maxima-user)
(use-package :maxima-taylor-series :maxima-user)
(use-package :maxima-trigonometry :maxima-user)
(use-package :maxima-special-functions :maxima-user)
(use-package :maxima-matrix-algebra :maxima-user)
(use-package :maxima-determinants :maxima-user)
(use-package :maxima-pattern-matching :maxima-user)
(use-package :maxima-limits :maxima-user)
(use-package :maxima-solve :maxima-user)
(use-package :maxima-debugging :maxima-user)
(use-package :maxima-miscellaneous :maxima-user)
(use-package :maxima-poisson-series :maxima-user)
(use-package :maxima-sets :maxima-user)
(use-package :maxima-fortran :maxima-user)
(use-package :maxima-ordinary-differential-equations :maxima-user)
(use-package :maxima-laplace :maxima-user)
(use-package :maxima-TeX :maxima-user)
(use-package :maxima-plotting :maxima-user)
(use-package :maxima-initialization :maxima-user)

;; OK, so what just happened?  We defined a whole lot of
;; empty packages, and had them all import the MAXIMA package,
;; in effect creating a large number of gateways to the MAXIMA
;; environment.  The reason for this is to allow us to begin
;; to separate out logical groupings of Maxima commands without
;; riping Maxima apart functionally speaking.  Now we can create
;; files for each of these packages, and move selected definitions
;; to them rather than having them in MAXIMA.

;; Now, we'll load the package files that have been created.
;; Currently, that's just the TeX package.

(load "./src/TeX-package.lisp")