Fix bug #1581: sublis & sublis_apply_lambda:true causing lisp errors
commitbdd809786b6a17a264d83ac932011a576d9e5540
authorKris Katterjohn <katterjohn@gmail.com>
Sun, 10 Jun 2018 22:57:13 +0000 (10 17:57 -0500)
committerKris Katterjohn <katterjohn@gmail.com>
Sun, 10 Jun 2018 22:57:13 +0000 (10 17:57 -0500)
tree6031514abace2ccf436d2798d3bdeb8abb240635
parentac509df271d5f54e1b41e3b505892af8403244a1
Fix bug #1581: sublis & sublis_apply_lambda:true causing lisp errors

The original case from the bug report:

  sublis ([f = lambda ([[x]], 'g)], f [2] (x)) => lisp error

A similar but simpler case that I found:

  sublis ([f = lambda ([], 'g)], f () ())      => lisp error

SIMPMQAPPLY was assuming the CAAR of an expression was a symbol
when it need not be.  Having a Maxima lambda expression in the
CAAR can occur when sublis substitutes a lambda expression and
sublis_apply_lambda is true.

The only change in this commit is a symbol check before calling
GET in SIMPMQAPPLY.  There is a special case in SIMPLIFYA for
lambda expressions in CAARs that performs the actual application.
Other functions like subst also use this special case for similar
effects.

See also the mailing list thread
  "subst(lambda ...), was: multiple evaluations & integrate"
started on 2013-06-12 for a discussion on substitutions,
sublis_apply_lambda and non-symbols in CAARs.

The test suite runs fine.
src/simp.lisp