Next: Сборка мусора, Previous: Справка, Up: Справка [Contents][Index]
Maxima написана на Lisp, поэтому легко получить доступ к Lisp функциям и переменным из Maxima и наоборот.
Lisp и Maxima символы различают с помощью соглашения об именах.
Lisp символ, который начинается со знака $ соответствует Maxima символу 
без знака доллара.
Maxima символ, который начинается со знака ? соответствует 
Lisp символу без знака вопроса.
Например, Maxima символ foo соответствует Lisp символу $foo,
в то время как Maxima символ ?foo соответствует Lisp символу foo,
Заметим, что ?foo записано без пробелов между ? и foo;
иначе можно перепутать с describe ("foo").
-, *, и другие специальные знаки в Lisp символах
должны быть экранированы \ везде, где они появляются в коде Maxima.
Например, Lisp идентификатор *foo-bar* записывается как ?\*foo\-bar\* в Maxima.
Lisp код может быть выполнен из Maxima сессии. Простая строка с Lisp кодом 
(содержащая одну и более форм) может быть выполнена с помощью специальной 
команды :lisp. Например,
(%i1) :lisp (foo $x $y)
вызывает Lisp функцию foo с Maxima переменными x и y в качестве аргументов.
:lisp конструкция может появляться в интерактивном приглашении
или в файле, исполняемом командой batch или demo, 
но только не в файле исполняемом командами load, batchload, 
translate_file, или compile_file.
Функция to_lisp() открывает интегративную Lisp сессию.
Ввод (to-maxima) закрывает Lisp сессию и возвращает к Maxima.
Lisp функции и переменные, которые, как известно, видны в Maxima как
функции и переменные с обычными именами (без специальной пунктуации)
должны иметь Lisp имена, начинающиеся со знака $.
Maxima чувствительна к регистру символов, различая буквы в нижнем и верхнем регистрах, в идентификаторах, в то время как Lisp - нет. Существуют некоторые правила, управляющие переводом имен между Lisp и Maxima.
$foo, $FOO, и $Foo - все соответствуют Maxima foo.
|$FOO| и |$foo|
соответствуют Maxima foo и FOO, в указанном порядке.
|$Foo| соответствует Maxima Foo.
#$ Lisp макрооператор позволяет использовать Maxima выражения в Lisp коде.
#$expr$ превращается в Lisp выражение, эквивалентное Maxima выражению expr.
(msetq $foo #$[x, y]$)
Это имеет тот же самый эффект как при вводе:
(%i1) foo: [x, y];
Lisp функция displa печатает выражение в Maxima форме.
(%i1) :lisp #$[x, y, z]$ ((MLIST SIMP) $X $Y $Z) (%i1) :lisp (displa '((MLIST SIMP) $X $Y $Z)) [x, y, z] NIL
Функции, заданные в Maxima не являются обычными Lisp функциями.
Lisp функция mfuncall вызывает Maxima функцию.
Например:
(%i1) foo(x,y) := x*y$ (%i2) :lisp (mfuncall '$foo 'a 'b) ((MTIMES SIMP) A B)
Некоторые Lisp функции скрыты в Maxima пакете, а именно такие как:
complement,
continue,
//,
float,
functionp,
array,
exp,
listen,
signum,
atan,
asin,
acos,
asinh,
acosh,
atanh,
tanh,
cosh,
sinh,
tan,
break
и gcd.
Next: Сборка мусора, Previous: Справка, Up: Справка [Contents][Index]