How to do matrix operation programatically in lisp
Subject: How to do matrix operation programatically in lisp
From: Robert Gloeckner
Date: Fri, 23 Nov 2007 16:56:57 +0100
Hello,
thanks for your infos how to run maxima under lisp :)
On 23.11.2007 04:45, Kun Lin wrote:
> Now, i have downloaded maxima's source code and loaded maxima-build.lisp
> and then do (maxima-load) in sbcl. I can run maxima from the lisp
> environment by
> doing (cl-user::run). So this mean i should have all the functions
> available to me in maxima in lisp.
>
> Is there way for me to get the equivalent result of matrix([1 2]) by
> doing something like
> (setf result (function args))?
>
> Is there a general way of doing something like this. Meaning is there a
> calling convention i can follow if i know the maxima input form i can
> deduce its equivalent lisp function call and arguments.
I think the answers are in chapter 3.2 of the online help (i read the
info files):
"Lisp and Maxima symbols are distinguished by a naming convention. A
Lisp symbol which begins with a dollar sign `$' corresponds to a Maxima
symbol without the dollar sign. A Maxima symbol which begins with a
question mark `?' corresponds to a Lisp symbol without the question mark.
[...]
Lisp code may be executed from within a Maxima session. A single
line of Lisp (containing one or more forms) may be executed by the
special command `:lisp'. For example,
(%i1) :lisp (foo $x $y)
[...]
The `#$' Lisp macro allows the use of Maxima expressions in Lisp
code. `#$<expr>$' expands to a Lisp expression equivalent to the
Maxima expression <expr>.
(msetq $foo #$[x, y]$)
This has the same effect as entering
(%i1) foo: [x, y];"
You can also translate() your maxima-code to see the equivalent lisp
code (& function calls).
> My ultimate goal is to use maxima as the backbone of all my
> mathematical computing needs (symbolic, matrices ...) in writing lisp
> programs. Can maxima do this? Another idea is maybe my lisp code can
> call a .mac file. I am just not sure what would be the best approach.
This is the same i would like to do, too ;)
HTH
Robert