lambda expressions in plot2d and quadpack functions
Subject: lambda expressions in plot2d and quadpack functions
From: Robert Dodier
Date: Thu, 12 Jan 2006 08:54:27 -0700
hello,
at present plot2d (lambda ([x], ...), [x, a, b]) fails,
also quad_qags (lambda ([x], ...), x, a, b) and other quadpack functions.
i would like to suggest that those should succeed.
i wonder if anyone has an objection to extending COERCE-FLOAT-FUN
slightly to handle maxima lambda expressions, as shown in the attached patch.
best,
robert dodier
Index: plot.lisp
===================================================================
RCS file: /cvsroot/maxima/maxima/src/plot.lisp,v
retrieving revision 1.59
diff -u -r1.59 plot.lisp
--- plot.lisp 10 Jan 2006 06:32:55 -0000 1.59
+++ plot.lisp 12 Jan 2006 15:46:04 -0000
@@ -523,6 +523,18 @@
($float result)
nil)))
'function)))))
+ ((and (consp expr) (eq (caar expr) 'lambda))
+ ; FOLLOWING CODE IS IDENTICAL TO CODE FOR EXPR = SYMBOL
+ ; (EXCEPT HERE WE HAVE EXPR INSTEAD OF MEXPR). DOUBTLESS BEST TO MERGE.
+ (let ((args (nth 1 expr)))
+ (coerce `(lambda ,(cdr args)
+ (declare (special ,@(cdr args)))
+ (let* (($ratprint nil)
+ (result ($realpart (meval* ',(nth 2 expr)))))
+ (if ($numberp result)
+ ($float result)
+ nil)))
+ 'function)))
(t
(let ((vars (or lvars ($sort ($listofvars expr))))
;(na (gensym "TMPF"))