|
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)
|