Au delà de la résolution des problèmes mathématiques, Maxima fournit son propre
langage de programmation pour écrire des programmes. De plus, comme il est écrit
en Lisp,
il donne aussi un accès facile à ce langage de programmation. Dans une session
Maxima, l'utilisateur peut saisir des commandes Lisp individuelles à l'aide du préfixe
« :lisp », comme dans l'exemple suivant :
(%i1) :lisp (+ 2/7 (* 3 4 1/5)) 94/35
L'utilisateur peut aussi démarrer une session Lisp depuis Maxima avec la
commande to_lisp(). Cette session Lisp peut ensuite être terminée,
pour revenir à Maxima, avec la commande Lisp
(to-maxima). Pour plus de détails, voir la section
Lisp and Maxima du manuel de
référence.
Maxima peut être compilé avec SBCL, Clisp, CCL, GCL, CMUCL, ECL, Scieneer Common Lisp (SCL), Allegro Common Lisp (ACL) et ABCL.
Les portages vers d'autres Common Lisp conformes à ANSI devraient être simples et sont les bienvenus ; veuillez envoyer un message à la liste de diffusion de Maxima si vous souhaitez travailler sur un portage.
Lors de la compilation de Maxima, l'implémentation Lisp est sélectionnée en
passant au script configure un argument de
la forme --enable-foolisp, où « foolisp » est le
nom de l'implémentation Lisp. La commande ./configure --help affiche
la liste des implémentations Lisp acceptées par configure
(entre autres options). Précisez toujours le type de Lisp ; configure essaie de
détecter automatiquement le type de Lisp s'il n'est pas indiqué, mais il a été
signalé que cette détection automatique peut échouer.
L'image compilée de Maxima peut aussi être rendue exécutable (en intégrant une
copie autonome du programme Lisp utilisé) lorsque Clisp, SBCL ou CMUCL
sont employés. Pour construire une image exécutable, le suffixe -exec
doit être ajouté à l'option --enable-foolisp donnée
au programme configure.
Il existe diverses différences entre les implémentations de Lisp,
concernant la vitesse, l'utilisation de la mémoire, la gestion des erreurs, la prise en charge de
l'interface de fonctions étrangères (FFI) et l'édition de la ligne de commande. Certaines
implémentations utilisent la bibliothèque GNU readline, qui permet de
rappeler des commandes déjà utilisées et de les modifier. Pour les
implémentations qui n'ont pas cette capacité, Maxima inclut
le frontal rmaxima, qui offre des fonctions avancées d'édition de ligne
via rlwrap.
Steel Bank Common Lisp (SBCL) est une bifurcation (fork) de CMUCL qui diffère par quelques détails mineurs, mais surtout parce qu'il est plus simple de reconstruire SBCL que CMUCL. Il existe des implémentations de SBCL pour Linux, plusieurs systèmes BSD, Solaris, Mac OS X et MS Windows.
L'utilisation de rmaxima est recommandée avec SBCL.
Clisp peut être compilé
avec la prise en charge de readline ; Maxima dispose alors de fonctions avancées
d'édition de la ligne de commande lorsqu'il est construit avec lui.
Clisp est compilé en bytecode ; Maxima exécuté sur Clisp est donc nettement plus lent que sur les Lisp compilés en instructions machine. En revanche, Clisp contient du code de CLN, une bibliothèque pour des calculs efficaces sur toutes sortes de nombres en précision arbitraire.
Il existe des implémentations de Clisp pour de nombreuses plateformes, dont MS Windows et les systèmes de type Unix.
Les versions de GCL
à partir de la 2.4.3 peuvent être compilées avec la prise en charge de readline ;
Maxima dispose alors de fonctions avancées d'édition de la ligne de commande lorsqu'il est construit
avec lui. GCL produit un exécutable Maxima rapide.
Seule la version de GCL compatible ANSI fonctionne avec Maxima ; ainsi, lorsque
GCL est compilé, il doit être configuré avec
l'option --enable-ansi, c'est-à-dire qu'il faut exécuter ./configure
--enable-ansi dans le répertoire de compilation avant
d'exécuter make. On peut déterminer si GCL est compatible ANSI ou non
en inspectant la bannière affichée à l'exécution de GCL ;
s'il est compatible ANSI, la bannière doit indiquer « ANSI ». De plus, la
variable spéciale *FEATURES* doit contenir le
mot-clé :ANSI-CL.
Il existe des implémentations de GCL pour de nombreuses plateformes, dont MS Windows et les systèmes de type Unix.
Clozure Common Lisp, ou CCL en abrégé, était auparavant connu sous le nom d'OpenMCL. Il est disponible pour Linux, MS Windows et Macintosh, et Maxima peut être compilé avec lui.
CMUCL est une option rapide pour Maxima sur les plateformes où il est disponible. Les versions 18e et 19a de CMUCL sont connues pour fonctionner. Il n'existe d'implémentations de CMUCL que pour les systèmes de type Unix (pas pour MS Windows).
L'utilisation de rmaxima est recommandée avec CMUCL.
ECL est une implémentation petite mais complète de Common Lisp. Le portage de Maxima pour Android est actuellement construit avec ECL.
Scieneer Common Lisp (SCL) est une option rapide pour Maxima sur une série de plateformes Linux et Unix. Allegro Common Lisp est fourni avec de nombreux paquets et interfaces, un débogueur et un environnement de développement interactif. Maxima peut être compilé avec ces deux implémentations de Lisp, mais seuls des tests limités ont été effectués, car ce sont des logiciels commerciaux non libres.
ABCL est une implémentation complète du langage Common Lisp, dotée à la fois d'un interpréteur et d'un compilateur, qui s'exécute dans la JVM.