Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://angg.twu.net/LUA/UbExpr2.lua.html -- http://angg.twu.net/LUA/UbExpr2.lua -- (find-angg "LUA/UbExpr2.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- This handles expressions for Calculus 2. -- -- See: (find-angg "LUA/UbExpr1.lua") -- (find-anggfile "LUA/RAng1.lua") -- -- (defun o () (interactive) (find-angg "LUA/UbExpr1.lua")) -- (defun l () (interactive) (find-angg "LUA/UbExpr2.lua")) -- (defun r () (interactive) (find-angg "LUA/RAng1.lua")) -- (defun rf () (interactive) (find-angg "LUA/RAngFormulas1.lua")) -- -- (find-sh0 "cd ~/LUA/; cp -v Pict2e1.lua UbExpr1.lua UbExpr2.lua ~/LATEX/") -- -- «.basic» (to "basic") -- «.define_MV1» (to "define_MV1") -- «.basic-tests» (to "basic-tests") -- «.subst» (to "subst") -- «.subst-tests» (to "subst-tests") -- «.defsubst-test» (to "defsubst-test") -- «basic» (to ".basic") -- (find-angg "LUA/UbExpr1.lua") require "UbExpr1" app = function (f, x) return UbExpr.from(nil, "<1>(<2>)", f, x) end mul = function (a, b) return UbExpr.from(nil, "<1> <2>", a, b) end Mul = function (a, b) return UbExpr.from(nil, "<1> ยท <2>", a, b) end plus = function (a, b) return UbExpr.from(nil, "<1> + <2>", a, b) end minus = function (a, b) return UbExpr.from(nil, "<1> - <2>", a, b) end exp = function (a) return UbExpr.from(nil, "e^{<1>}", a) end paren = function (a) return UbExpr.from(nil, "(<1>)", a) end Paren = function (a) return UbExpr.from(nil, "\\left(<1>\\right)", a) end sen = function (x) return app("\\sen", x) end sin = function (x) return app("\\sin", x) end cos = function (x) return app("\\cos", x) end tan = function (x) return app("\\tan", x) end ln = function (x) return app("\\ln", x) end Intx = function (a, b, body) return UbExpr.from(nil, "\\D \\Intx{<1>}{<2>}{<3>}", a, b, body) end Intu = function (a, b, body) return UbExpr.from(nil, "\\D \\Intu{<1>}{<2>}{<3>}", a, b, body) end difx = function (a, b, body) return UbExpr.from(nil, "\\difx{<1>}{<2>}{<3>}", a, b, body) end difu = function (a, b, body) return UbExpr.from(nil, "\\difu{<1>}{<2>}{<3>}", a, b, body) end eq5 = function (a, b, c, d, e) return UbExpr.from(nil, [[ \begin{array}{rcl} <1> &=& <2> \\ &=& <3> \\ &=& <4> \\ &=& <5> \\ \end{array} ]], a, b, c, d, e) end isstring = function (o) return type(o) == "string" end isnumber = function (o) return type(o) == "number" end isatom = function (o) return (isstring(o) or isnumber(o)) and o end isvar = function (o) return isstring(o) and o end isapp_fmt = app("f", "a").fmt isapp_otype = otype(app("f", "a")) isapp = function (o) return otype(o) == isapp_otype and o.fmt == isapp_fmt end isapp_f = function (o) return isapp(o) and o[1] end isapp_arg = function (o) return isapp(o) and o[2] end mapsubst = function (S, o) o = shallowcopy(o) for i=1,#o do o[i] = S(o[i]) end return o end -- «define_MV1» (to ".define_MV1") -- define_MV1 = function () f = function (x) return app("f", x) end fp = function (x) return app("f'", x) end g = function (x) return app("g", x) end gp = function (x) return app("g'", x) end a,b,x,u = "a", "b", "x", "u" -- -- From: (c2m221atisp 8 "formulas-mv-2022.1") -- (c2m221atisa "formulas-mv-2022.1") MV1 = eq5(Intx (a, b, mul(fp(g(x)), gp(x))), difx (a, b, f(g(x))), minus (f(g(b)), f(g(a))), difu (g(a), g(b), f(u)), Intx (g(a), g(b), fp(u))) end -- «basic-tests» (to ".basic-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "UbExpr2.lua" define_MV1() = MV1 S0 = function (o) return ((isvar (o) == "a") and 44) or ((isapp_f(o) == "f") and Mul(42, isapp_arg(o))) or (isatom(o) and o) or mapsubst(S0, o) end S1 = function (o) return ((isvar (o) == "a") and 2) or ((isvar (o) == "b") and 3) or ((isapp_f(o) == "f") and sen(S1(isapp_arg(o)))) or ((isapp_f(o) == "f'") and cos(S1(isapp_arg(o)))) or ((isapp_f(o) == "g") and Mul(42, S1(isapp_arg(o)))) or ((isapp_f(o) == "g'") and 42) or (isatom(o) and o) or mapsubst(S1, o) end = isapp_f(g(42)) = isapp_f(gp(42)) == "g'" = sen(42) = cos(42) = MV1 = S1(MV1) --]==] -- «subst» (to ".subst") -- (find-angg "LUA/Code.lua" "Code") -- substdefault = function (o, S) return (isatom(o) and o) or mapsubst(S, o) end substvar = function (o, varname, body) if isvar(o) == varname then return expr(body) end end substf = function (o, funname, body) if isapp_f(o) == funname then return Code.ve(" expr1 => "..body)(isapp_arg(o)) end end substsplit = function (arrowstr) local left,right = arrowstr:match("^%s*(%S+)%s*:=(.*)$") if not left then error() end return left,right end subst = function (o, arrowstr) local left,right = substsplit(arrowstr) local funname = left:match("^([^()]+)%(") if funname then return substf(o, funname, right) end return substvar(o, left, right) end substbig = function (o, bigstr, S) for i,li in ipairs(splitlines(bigstr)) do if li:match("%S") then local result = subst(o, li) if result then return result end end end return substdefault(o, S) end defsubst0 = function (name, bigstr) local fmt = "%s = function (o) return substbig(o, [[\n%s]], %s) end" return format(fmt, name, bigstr, name) end defsubst = function (name, bigstr) eval(defsubst0(name, bigstr)) end -- «subst-tests» (to ".subst-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "UbExpr2.lua" define_MV1() = substsplit(" a := 42 ") = substvar("a", "a", "sen(42)") = substvar("b", "a", "sen(42)") = substf(f(22), " f(expr1) := Mul(42, expr1) ") S1 = function (o) return subst(o, " a := 2 ") or subst(o, " b := 3 ") or subst(o, " f(expr1) := Mul(42, S1(expr1)) ") or subst(o, " f'(expr1) := 42 ") or substdefault(o, S1) end = S1(f(33)) = S1(f(f(33))) = MV1 = S1(MV1) Paren(MV1) S2 = function (o) return substbig(o, [[ a := 2 b := 3 f(expr1) := Mul(42, S1(expr1)) f'(expr1) := 42 ]], S2) end = S2(MV1) --]==] -- «defsubst-test» (to ".defsubst-test") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "UbExpr2.lua" define_MV1() = defsubst0("S2", [[ a := 2 b := 3 f(expr1) := Mul(42, S2(expr1)) f'(expr1) := 42 ]]) defsubst("S2", [[ a := 2 b := 3 f(expr1) := Mul(42, S2(expr1)) f'(expr1) := 42 ]]) = MV1 = S2(MV1) --]==] -- (c2m221prp 4 "UbExpr-test") -- (c2m221pra "UbExpr-test") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "UbExpr2.lua" dofile "Pict2e1.lua" define_MV1() = MV1 = MV1:topict() = MV1:topict():dd() = MV1:topict():sa("foo") = Paren(MV1):topict():sa("foo") = Paren(MV1):sa("foo") --]==] -- Local Variables: -- coding: utf-8-unix -- End: