# [Maxima] lambda for mat_function

Volker van Nek volkervannek at googlemail.com
Fri Mar 6 11:34:37 CST 2009

```Hello,
I had problems to post this morning. Here is my posting again.
Please excuse if you recieve this twice.

Hi,

I think this is a bug. The problem is not the lambda expression.
I try to point to the problem:

(%i1) display2d:false\$
(%i2) foo(f,x):= block([i:2], f(x))\$

mat_function is written like foo.
For internal loopings etc. it uses the variables i,ii,j,k,n and some more.
My i in foo stands for one of these and interferes with an i which is passed in by the function f:

(%i3) bar(x):= x^i\$
(%i4) foo(bar,x);
(%o4) x^2

In your example you protect the exponent i by using block([i], .

(%i5) baz(x):= block([i],x^i)\$
(%i6) foo(baz,x);
(%o6) x^i

You also can do this with a lambda expression:

(%i7) foo(lambda([x],x^i),x);
(%o7) x^2
(%i8) foo(lambda([x],block([i],x^i)),x);
(%o8) x^i

I hope the last solves your problem.

I think that diag.mac should be revised.
I found some presumably unintended programming constructs.

To avoid variables beeing catched gensym-like names could be used
or the functions could be rewritten in Lisp using defmspec: E.g.

(%i9) :lisp (defmspec \$foo1 (a) (let ((i 2)(f (cadr a)) (z (caddr a))) (mfuncall f z)))
(LAMBDA-CLOSURE () () () (A)
(LET ((I 2) (F (CADR A)) (Z (CADDR A))) (MFUNCALL F Z)))
(%i9) foo1(bar,x);
(%o9) x^i
(%i10) foo1(lambda([x],x^i),x);
(%o10) x^i

Greetings
Volker van Nek

Xiang Liu schrieb:
>  *Function:* *mat_function** (f,mat)*
>
> Returns *f(mat)*, where f is an analytic function and mat a matrix.
> I have tried:
>
>
>
> A:matrix([4,1,2],[0,2,-4],[0,1,6]);
>
>
> mat_function(lambda([x],x^k),A);
>
>
> fpow(x):=block([k],declare(k,integer),x^k);
>
>
> mat_function(fpow,A);
>
>
> The question is: why lambda expression doesn't work here?[?]
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>

```