|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
/*
* This file:
* http://anggtwu.net/MAXIMA/2025-methods.mac.html
* http://anggtwu.net/MAXIMA/2025-methods.mac
* (find-angg "MAXIMA/2025-methods.mac")
* Author: Eduardo Ochs <eduardoochs@gmail.com>
* See: http://anggtwu.net/eev-maxima.html#methods
* (find-maximamsg "59192342 202506 07" "Edrx: examples and screenshots")
* (find-maximamsg "59187622 202505 25" "Edrx: preliminary announcement")
* (find-es "maxima" "defstruct-ab")
*
* Methods for Maxima's "defstruct"s, inspired by Lua.
* In Lua ":" is translated in this way:
*
* o:f (4, 5)
* ==> o.f(o, 4, 5)
*
* In Maxima the "@@" - defined below - is translated in this way:
*
* defstruct(ab(a, b));
* o : new(ab(2, 3));
* o@@f (4, 5);
* ==> ab__f(o, 4, 5);
*
* The methods for a structure "ab" are stored in functions with names
* starting with "ab__".
*
* «.core-tests» (to "core-tests")
* «.poly-tests» (to "poly-tests")
*/
"@@4"(structname,o,method,Args) :=
apply(concat(structname,"__",method), append([o],Args));
"@@" (o,method) :=
buildq([o,method], lambda([[Args]], "@@4"(op(o),o,method,Args)));
infix("@@",200,201);
/* «core-tests» (to ".core-tests")
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
load("2025-methods.mac");
"@@4"(ab,oab,f,[4,5]); " ab__f(oab, 4, 5) "$
defstruct(ab(a,b));
oab : new(ab(2,3));
oab@@f; " lambda([[Args]], @@4(op(oab),oab,f,Args)) "$
oab@@f (4,5); " ab__f(oab, 4, 5) "$
ab__f(o,x,y) := [o@a,o@b,x,y]$
oab@@f (4,5); " [2, 3, 4, 5] "$
*/
/* «poly-tests» (to ".poly-tests")
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
load("2025-methods.mac");
seqby(a,b,stp) := makelist(i, i,a,b,stp);
defstruct(poly(poly,var));
poly__hi (p) := hipow(p@poly, p@var)$
poly__coef (p,k) := ratcoef (p@poly, p@var, k)$
poly__coefs(p,ks) := makelist(p@@coef(k), k, ks)$
poly__L (p) := p@@coefs(seqby(p@@hi(),0,-1))$
myp : new(poly(10*x^2 + 20*x + 30, x));
myp@@hi(); " 2 "$
myp@@coefs([3,2,1,0]); " [0, 10, 20, 30] "$
myp@@L(); " [10, 20, 30] "$
*/