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]