From: Eduardo O. <edu...@gm...> - 2025-04-29 06:43:56
|
That's EXACTLY what I was looking for!... And that code is much clearer than dim-%at and dim-$matrix... Many many many thanks! =) =) =) Cheers, Eduardo =) P.S.: I'm attaching a screenshot. On Tue, 29 Apr 2025 at 03:26, Robert Dodier <rob...@gm...> wrote: > Eduardo, I'm not sure if you've already solved this problem, but if not, > maybe this is helpful. > > Here's a display for the way antiderivatives are often evaluated in > elementary calculus classes. I'm guessing that's why you were looking at > at-like expressions. > > (%i2) load ("dim-antideriv.lisp"); > (%o2) dim-antideriv.lisp > (%i3) 'antideriv (F(u), u, a, b); > │u = b > (%o3) F(u)│ > │u = a > (%i4) 'antideriv (F(u[k]), u[k], a[k], b[k]); > │u = b > (%o4) F(u )│ k k > k │ > │u = a > k k > (%i5) 'antideriv(a+b,u,z^2^n+y[k],x^2-z[k]); > 2 > │u = x - z > (%o5) b + a│ k > │ n > │ 2 > │u = z + y > k > (%i6) 'antideriv(a+b,u,z^2^n+y[k],x^2-z[k[l[u]]]); > 2 > │u = x - z > │ k > │ l > (%o6) b + a│ u > │ n > │ 2 > │u = z + y > k > > The code shown in the PS is adapted from DIM-%AT with some modifications. > I tried to make it clearer but it is still fairly obtuse. The tricky part > was getting the subexpressions to line up correctly ... it took quite a > number of tries to get it all straightened out. > > Hope this helps, if not I'll give it another try. > > Robert > > PS. > > ;; DIM-%ANTIDERIV -- 2-d pretty printer display for antiderivative-like > expressions > ;; copyright 2025 by Robert Dodier > ;; I release this work under terms of the GNU General Public License, v2 > > (defun dim-%antideriv (form result) > > (unless (= (length (cdr form)) 4) > (return-from dim-%antideriv (dimension-function form result))) > > (let* > ((args (rest form)) > (expr (first args)) > (my-var (second args)) > (lower-val (third args)) > (upper-val (fourth args)) > (lower-eqn (list '(mequal) my-var lower-val)) > (upper-eqn (list '(mequal) my-var upper-val)) > (vertical-bar-char (if (display2d-unicode-enabled) at-char-unicode > (car (coerce $absboxchar 'list)))) > vertical-bar > expr-result lower-result upper-result > expr-w expr-h expr-d lower-w lower-h lower-d upper-w upper-h upper-d) > (declare (ignorable expr-w expr-h expr-d lower-w lower-h lower-d > upper-w upper-h upper-d)) > > (setq expr-result (dimension expr nil 'mparen 'mparen nil 0) > expr-w width expr-h height expr-d depth) > > (setq lower-result (dimension-infix lower-eqn nil) > lower-w width lower-h height lower-d depth) > > (setq upper-result (dimension-infix upper-eqn nil) > upper-w width upper-h height upper-d depth) > > (setq vertical-bar (list 'd-vbar (1+ (max expr-h upper-d)) (max (1+ > expr-d) lower-h) vertical-bar-char)) > > (setq result (append (list (append (list (- lower-w) (max expr-h > upper-d)) upper-result) > (append (list 0 (- (max (1+ expr-d) > lower-h))) lower-result) > vertical-bar > (append (list 0 0) expr-result)) > result)) > > (setq height (+ 1 (max expr-h upper-d) upper-h) > depth (+ (max (1+ expr-d) lower-h) lower-d)) > > (update-heights height depth) > > result)) > > (setf (get '%antideriv 'dimension) 'dim-%antideriv) > > |