From: Robert D. <rob...@gm...> - 2022-11-23 17:21:06
|
On Mon, Nov 21, 2022 at 3:52 PM Eduardo Ochs <edu...@gm...> wrote: > what is right & recommended way to write curried functions in Maxima? > For example, in a first moment I though that this > > F : lambda([a], lambda([b], 10*a+b)); > F(2)(3); I'll take this opportunity to toot my own horn again -- I'm working intermittently on an implementation of lexical symbols for Maxima. I have put just the lexical symbols stuff on a branch in the Maxima Git repo (namely the branch lexical-symbols), but I also have a proof of concept for lexical environments (closures), which one can find at: https://github.com/maxima-project-on-github/maxima-packages in the folder robert-dodier/lexical-symbols. Here's what I get for this example: (%i2) load ("lexical_symbols.mac"); (%o2) lexical_symbols.mac (%i3) F : lambda([a], lambda([b], 10*a+b)); (%o3) lambda([a], lambda([b], 10 a + b)) (%i4) F(2); (%o4) closure([env542], lambda([b], 10 a + b)) (%i5) get_envs (%o4); (%o5) [env542 = [a = 2]] (%i6) %o4(3); (%o6) 23 (%i7) F(2)(3); (%o7) 23 env542 is a symbol which has a hash table attached to it, and the table contains one value, namely 2, for the key a. I've thought about ways to hide the closure stuff, e.g. by putting it in the expression car, but it seems best to make it explicit as long as this stuff is all up in the air. It's easy enough to get simple stuff like this to work; it will be more challenging to cover the multitude of further considerations which are sure to arise, e.g. to what extent are closures actually ordinary Maxima expressions, what if multiple closures come into the picture, what are the kinds of expressions to which closures apply (other than lambda), is it useful to try to simplify closures (e.g. omit variables which aren't referenced in the enclosed expression, maybe strip off closures which have no variables), can closures be created by hand, etc. Thanks for your interest in this stuff -- I am making slow progress, and it is helpful to know there is some interest in this topic. best, Robert |