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]