Lisp e Maxima (Manual do Maxima)

Next: Descartando, Previous: Ajuda, Up: Ajuda [Contents][Index]

### 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`.

Next: Descartando, Previous: Ajuda, Up: Ajuda [Contents][Index]