quote evaluates some expressions
sformichella opened this issue · 4 comments
The quote
function evaluates expressions like 2 * 2
, 10 / 5
, and x + x
to 4
, 2
, and 2x
, respectively. This seems to be a bug since the documentation describes quote
as not evaluating the expression passed to it. Expressions like 2 + 2
and 4 - 3
are not evaluated as expected: quote(2 + 2) = "2 + 2"
, quote(4 - 3) = "4 - 3"
.
Hi @sformichella - quote
is tricky, there are two overlapping reasons for the confusing results:
-
test quote by doing
print(quote(x+x))
rather thanquote(x+x)
- this is because the "javascript"print
might do some beautifications and evaluations of its own, while the "algebrite"print
doesn't. This might be a separate issue of its own but it doesn't concernquote
. -
there are two parse-time simplifications that happen (search for
parse_time_simplifications
) i.e. numeric constants are multiplied right away and "1*" is taken away. Try to disable that flag and see if it all works better for you - but I think there might be some code that "trusts" that there is a normal form to expressions whereby we never want constants multiplications (makes handling of expressions easier to normalise them that way), so check to see if it works for you.
Commented runs:
print(quote(1+1))
-> 1+1
print(quote(2*2))
-> 4
// numeric constants are multiplied away at parse time
print(quote(10/5))
-> 2
// numeric constants are multiplied away at parse time
print(quote(x+x))
-> x+x
print(quote(x*x))
-> x*x
// not a constant
print(quote(2*x))
-> 2*x
print(quote(1*x))
-> x
// 1* is simplified at parse time
Hope it makes sense. Closing for now.
by the way note that "simplify_1_in_products" is done after "multiply_consecutive_constants"... which is strange because it would seem that the first is a sub-case of the second. However It could be that you want to simplify the "1*" but not do the "other" simplification.
also see the comment at the top of the lookup
code if you use quote
a lot, as it explains some of the tricks needed to actually "make use" of quote
Great! Thank you :)