# [Maxima] Curried Functions

Peter Danenberg pcd at wikitex.org
Mon Feb 18 22:29:20 CST 2008

```Quoth Robert Dodier on Prickle-Prickle, Chaos 49, 3174:
> One way to get what (I think) you want is to use buildq.

I'm using curry, by the way, to study the growth of iterative
functions (f*_c = min{x >= 0: f^(x)(n) <= c});* by fixing f and c while
plotting x:

curry(f, [args]) :=
buildq([f, args], lambda([[x]], apply(f, append(args, x))));
lg(x) := block([], log(x) / log(2))\$
iterated(f, c, x) := block([],
if x <= c
then 0
else 1 + iterated(f, c, f(x)))\$

fs: [lambda([x], x - 1),
lambda([x], lg(x)),
lambda([x], x / 2),
lambda([x], x / 2),
lambda([x], sqrt(x)),
lambda([x], sqrt(x)),
lambda([x], x^(1/3)),
lambda([x], x/lg(x))]\$
cs: [0, 1, 1, 2, 2, 1, 2, 2]\$
curries: map(lambda([f, c], curry(iterated, f, c)), fs, cs)\$

plot2d(curries, [x, 0, 2^6], [y, 0, 2^6], [gnuplot_term, X11])\$

I'm not sure if some native Maxima facility would accomplish the same
thing.

-----------
* Cormen et al., Algorithms (2004), 60.
```