Próximo: , Anterior: , Acima: Ajuda   [Conteúdo][Índice]

3.1, Lisp e Maxima

Maxima é escrito na liguagem de programação Lisp, e é fácil acessar funções Lisp e variáveis a partir do Maxima e vice-versa. Símbolos Lisp e Maxima são distingüidos através de uma convenção de nome. Um símbolo Lisp que começa com um sinal de dólar $ corresponde a um símbolo Maxima sem o sinal de dólar. Um símbolo Maxima que começa com um ponto de interrogação ? corresponde a um símbolo Lisp sem o ponto de interrogação. Por exemplo, o símbolo Maxima foo corresponde ao símbolo Lisp $foo, enquanto o símbolo Maxima ?foo corresponde ao símbolo Lisp foo, Note que ?foo é escrito sem um espaço entre ? e foo; de outra forma pode ser uma chamada errônea para describe ("foo").

Hífen -, asterisco *, ou outro caractere especial em símbolos Lisp deve ser precedido por uma barra invertida \ onde ele aparecer no código Maxima. Por exemplo, o identificador Lisp *foo-bar* é escrito ?\*foo\-bar\* no Maxima.

Código Lisp pode ser executado dentro de uma sessão Maxima. Uma linha simples de Lisp (contendo uma ou mais formas) pode ser executada através do comando especial :lisp. Por exemplo,

(%i1) :lisp (foo $x $y)

chama a função Lisp foo com variáveis Maxima x e y como argumentos. A constução :lisp pode aparecer na linha de comando interativa ou em um arquivo processado por batch ou demo, mas não em um arquivo processado por load, batchload, translate_file, ou compile_file.

A função to_lisp() abre uma sessão interativa Lisp. Digitando (to-maxima) fecha a sessão Lisp e retorna para o Maxima.

Funções Lisp e variáveis que são para serem visíveis no Maxima como funções e variáveis com nomes comuns (sem pontuação especial) devem ter nomes Lisp começando com o sinal de dólar $.

Maxima é sensível à caixa, distingue entre letras em caixa alta (maiúsculas) e letras em caixa baixa (minúsculas) em identificadores, enquanto Lisp não é sensível à caixa. Existem algumas regras governando a tradução de nomes entre o Lisp e o Maxima.

  1. Um identificador Lisp não contido entre barras verticais corresponde a um identificador Maxima em caixa baixa. Se o identificador Lisp estiver em caixa alta, caixa baixa, ou caixa mista, é ignorado. E.g., Lisp $foo, $FOO, e $Foo todos correspondem a Maxima foo.
  2. Um identificador Lisp que está todo em caixa alta ou todo em caixa baixa e contido em barras verticais corresponde a um identificador Maxima com caixa invertida. Isto é, caixa alta é alterada para caixa baixa e caixa baixa para caixa alta. E.g., Lisp |$FOO| e |$foo| corresponde a Maxima foo e FOO, respectivamente.
  3. Um identificador Lisp que é misto de caixa alta e caixa baixa e contido entre barras verticais corresponde a um identificador Maxima com o mesma caixa. E.g., Lisp |$Foo| corresponde a Maxima Foo.

A macro Lisp #$ permite o uso de expressões Maxima em código Lisp. #$expr$ expande para uma expressão Lisp equivalente à expressão Maxima expr.

(msetq $foo #$[x, y]$)

Isso tem o mesmo efeito que digitar

(%i1) foo: [x, y];

A função Lisp displa imprime uma expressão em formato Maxima.

(%i1) :lisp #$[x, y, z]$ 
((MLIST SIMP) $X $Y $Z)
(%i1) :lisp (displa '((MLIST SIMP) $X $Y $Z))
[x, y, z]
NIL

Funções definidas em Maxima não são funções comuns em Lisp. A função Lisp mfuncall chama uma função Maxima. Por exemplo:

(%i1) foo(x,y) := x*y$
(%i2) :lisp (mfuncall '$foo 'a 'b)
((MTIMES SIMP) A B)

Algumas funções Lisp possuem o mesmo nome que no pacote Maxima, a saber as seguintes.

complement, continue, //, float, functionp, array, exp, listen, signum, atan, asin, acos, asinh, acosh, atanh, tanh, cosh, sinh, tan, break, e gcd.


Próximo: , Anterior: , Acima: Ajuda   [Conteúdo][Índice]