|
Maxima é escrito em Lisp, uma linguagem de programação realmente única que foi desenvolvida por John McCarthy no MIT. A mais recente publicação sobre Lisp é possivelmente:
McCarthy, John:
Recursive Functions of Symbolic Expressions and Their Computation, Part I Communications of the ACM, Vol. 3, April 1960, pp. 184-195
Para inserir uma peça de Lisp, você escreve:
:lisp (list 'a 'b 'c)
:q(a b c)
Para entrar no modo Lisp, você escreve :lisp, para completar o modo Lisp e retornar ao Maxima, você escreve :q em uma nova linha. O texto Lisp por si mesmo não deve conter um encerramento de linha.
Alternativamente, você pode inserir
to_lisp();
(%i1) to_lisp();
Type (to-maxima) to restart MAXIMA> (cons 'a 'b)
(A . B) MAXIMA> (append '(a b c) '(d e f))
(A B C D E F) MAXIMA> (reverse '(a b c))
(C B A) MAXIMA> (mapcar '(lambda(x) (list x)) '(a b c))
((A) (B) (C)) MAXIMA> (run)
Maxima restarted.
Essas são expressões Lisp realmente muito simples. Elas podem trazer para você conhecimento Lisp volta para a vida e fornece a você umas poucas dicas sobre o dialeto usado pelo Maxima.
No modo Lisp, você pode acessar a representação interna de expressões armazenadas em células de resultado. Para obter um resultado, você insere o rótulo de célula de resultado escrita entre barras verticais e com um sinal de dólar prefixado:
(%i1) (sin(x) + cos(x) + sin(x)/sec(x));
sin(x)
(%o1) ------ + sin(x) + cos(x)
sec(x)
(%i2) to_lisp();
Type (to-maxima) to restart
MAXIMA> |$%o1|
((MPLUS SIMP) ((%COS SIMP) |$x|) ((%SIN SIMP) |$x|)
((MTIMES SIMP) ((MEXPT SIMP) ((%SEC SIMP) |$x|) -1)
((%SIN SIMP) |$x|)))
MAXIMA> (to-maxima)
|$%o1| responde a representação interna da expressão na célula de valor %o1. Para melhor legibilidade, esse resultado é fornecido aqui na forma formatada:
((MPLUS SIMP)
((%COS SIMP) |$x|)
((%SIN SIMP) |$x|)
((MTIMES SIMP)
((MEXPT SIMP)
((%SEC SIMP) |$x|)
-1
)
((%SIN SIMP) |$x|)
) )
(%i1) 'integrate(sin(x)*exp(x), x);
/
[ x
(%o1) I %e sin(x) dx
]
/
(%i2) to_lisp();
Type (to-maxima) to restart
MAXIMA> |$%o1|
((%INTEGRATE SIMP)
((MTIMES SIMP) ((MEXPT SIMP) $%E |$x|) ((%SIN SIMP) |$x|))
|$x|)
O segundo elemento do nível mais alto (cadr |$%o1|) é o integrando, o terceiro elemento do nível mais alto (caddr |$%o1|) é a variável de integração. Com esse conhecimento podemos realizar a integração em Lisp:
MAXIMA> ($INTEGRATE (cadr |$%o1|) (caddr |$%o1|))
((MTIMES SIMP) ((RAT SIMP) 1 2) ((MEXPT SIMP) $%E |$x|)
((MPLUS SIMP) ((MTIMES SIMP) -1 ((%COS SIMP) |$x|))
((%SIN SIMP) |$x|)))
MAXIMA> (to-maxima)
|