> This > > principle would be even more useful when they got to calculus, where > > notations like dy/dx and integrals are hopelessly ambiguous in that the > > terminating dx looks superficially as if it could commute with the > > integrand!
Yes, and that very ambiguity has inspired mathematicians to extend mathematics to embrace its implications. Consider "operational calculus". At several levels, that illustrates the profound differences between programming and mathematics. Consider that the word "function" can have have different definitions in different mathematical contexts, while to a programmer a function is simply a computable map. A user of a language, like Lisp, that treats functions as computable maps can't easily make contact with the more abstract properties of mathematical functions. You can't write DiracDelta in Lisp. It isn't a map, and cannot be computed. But expressions containing DiracDelta can sometimes be rewritten to eliminate it. Those rewriting rules are its implementation. That's the kind of thing that that Mathematica does that Lisp cannot (unless you write a language that's Mathematica-like in Lisp, but then you're no longer working in Lisp).