My recent work in Mathematica has re-awakened some of my LISP sensibilities -- intuitions that I lost while working in Java. What is it about Java that makes me forget about symbolic programming? Well, I suppose it would be nice if Java had:
- a symbol type
- a "data" syntax
- lightweight lists
- less verbose collection syntax (e.g. for operations like fold/reduce)
The list could grow longer, of course. Where are higher-order functions or even simple lambdas?
Having said all that, it is not impossible to do symbolic programming in Java. It is just unpleasant (contrast the LISP and Java LabEngines, for example). Also, the whole Java culture is "do this, then this, then this...", not "compose this and this and this". Java makes the function call a significant event. Not as significant as it was in the Fortran days, to be sure, but still way more significant than in LISP or Smalltalk or Mathematica or Haskell or Scala or ...