Maxima
Un système de calcul formel

Maxima et Lisp

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.

Implémentations Lisp de Maxima

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.

SBCL

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

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.

GCL

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.

CCL

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

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

ECL est une implémentation petite mais complète de Common Lisp. Le portage de Maxima pour Android est actuellement construit avec ECL.

SCL et Allegro CL

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

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.

Sites Lisp utiles

Common Lisp implementation
Comparaison des implémentations de Common Lisp activement développées.
CLHS
La Common Lisp HyperSpec (spécification hypertexte de Common Lisp).
Common Lisp Tutorials
Pour ceux qui veulent commencer à apprendre Lisp.
CLiki
Archive de liens et d'informations sur Lisp, maintenue par les utilisateurs.