Siguiente: Recolector de basura, Anterior: Programación, Subir: Programación [Índice general][Índice]
Maxima fue escrito en Lisp, y es muy fácil tener acceso a funciones y variables Lisp desde Maxima y viceversa.
Los símbolos Lisp y los símblos Maxima están claramente diferenciados por medio de una convención de nombres.
Un símblo Lisp el cual comienza con un signo pesos $ corresponde a un símbolo Maxima sin el signo pesos.
Un símbolo Maxima el cual comienza con un signo de cierre de interrogación ? corresponde a un símbolo Lisp sin dicho signo.
Por ejemplo, el símbolo Maxima foo corresponde a el símbolo Lisp $FOO,
mientras que el símbolo Maxima ?foo corresponde a el símbolo Lisp FOO,
tenga en cuenta que ?foo esta escrito sin espacio entre ? y foo;
de otra manera se estaría invocando a describe ("foo").
El guión -, asterisco *, u otros carácteres especiales en símbolos Lisp deben ser escritos mediante un backslash \ si aparecen en código Maxima.
Por ejemplo, el identificador Lisp *foo-bar* se debe escribir ?\*foo\-bar\* en Maxima.
Se puede ejecutar código Lisp desde una sesión de Maxima.
Una línea Lisp (que contenga una o más formas) puede ser ejecutada
por medio de un comando especial :lisp. Por ejemplo,
(%i1) :lisp (foo $x $y)
se llama a la función Lisp foo con variables Maxima x y
y como argumentos.
La instrucción :lisp puede aparecer en el prompt interactivo
o en un archivo que sea procesado por batch o demo, pero no
en un archivo que sea procesado por load, batchload, translate_file o compile_file.
La función to_lisp() abre una sesión interactiva con el interprete Lisp.
Escribiendo (to-maxima) se cierra la sesión con Lisp y se retorna a Maxima.
Las funciones y variables Lisp las cuales esten para ser visibles en Maxima como funciones y variables con nombres oridinarios (sin una puntuación especial), deben tener nombres tipo Lisp que comiencen con el signo pesos
$.
Maxima distingue entre letras minúsculas y mayúsculas en identificadores. Existen algunas reglas que gobiernan la traducción de nombres entre Lisp y Maxima.
$foo, $FOO, y $Foo,
todos corresponden al identificador Maxima foo. Esto es así
porque $foo, $FOO y $Foo se convierten por defecto al
símbolo $FOO de Lisp.
|$FOO| y |$foo|
corresponden los identificadores Maxima foo y FOO, respectivamente.
|$Foo| corresponde a el identificador Maxima Foo.
La macro Lisp #$ permite el uso de expresiones Maxima dentro de código Lisp. #$expr$ extiende a una expresión Lisp equivalente a la expresión Maxima expr.
(msetq $foo #$[x, y]$)
Esto tiene el mismo efecto que:
(%i1) foo: [x, y];
La función Lisp displa imprime una expresión en formato Maxima.
(%i1) :lisp #$[x, y, z]$ ((MLIST SIMP) $X $Y $Z) (%i1) :lisp (displa '((MLIST SIMP) $X $Y $Z)) [x, y, z] NIL
Las funciones definidas en Maxima no son funciones Lisp ordinarias.
La función Lisp mfuncall llama a una función Maxima.
Por ejemplo:
(%i1) foo(x,y) := x*y$ (%i2) :lisp (mfuncall '$foo 'a 'b) ((MTIMES SIMP) A B)
Algunas funciones Lisp son compartidas en el paquete Maxima, las cuales se listan a continuación:
complement,
continue,
//,
float,
functionp,
array,
exp,
listen,
signum,
atan,
asin,
acos,
asinh,
acosh,
atanh,
tanh,
cosh,
sinh,
tan,
break,
y gcd.
Siguiente: Recolector de basura, Anterior: Programación, Subir: Programación [Índice general][Índice]