The Pure Programming Language
agraef.github.io
agraef.github.io
The major difference between a term-rewriting system and a general-purpose functional/declarative language is that you don't need to define everything. Expressions will be transformed until they can't anymore, and then they're left alone. So you can e.g. implement symbolic differentiation as a set of rules, and take the derivative of a symbolic expression, because the variables (or even entire functions!) just don't need to be defined.
The king of all term-rewriting systems is (imo) Mathematica. It's extraordinarily powerful, capable of matching subtrees and variable arity expressions and it's perfect for doing card tricks with algebraic identities. Unfortunately proprietary.
Sadly, term-rewriting languages are languishing. Even Pure is pretty dead.
Just as one simple example:
Suppose you have defined some expressions that describe how to read/write data from a database, and you have used them to define a workflow-expression that retrieves a bunch of data, does some math on it, and displays the result.
In Mathematica, you can plug that whole workflow-expression into the "Simplify" function and it will potentially eliminate entire database calls if it realizes you've got stuff like "GetData[y]*(GetData[x]-GetData[x])" in your result that will always evaluate to 0.
You can even do things like define a high "complexity" of your GetData functions to make the Simplify function look for an algebraic form that will minimize calls to the database, even if it has to make the algebra look uglier.
It also makes me think the book Algebra-Driven Design[1]. That coupled with what you're describing sounds like a powerful combination.
[1]: https://reasonablypolymorphic.com/blog/algebra-driven-design...
https://github.com/mentat-collective/emmy
It's based on an older library for Scheme, by Sussman.
I think that's not really true. It's not that Mathematica isn't trend-driven, just that it's responsive to trends more or less to the extent that Wolfram (company or person) is, rather than to the extent that the entire developer community is. Depending on how you use it, you may or may not like its embrace of new trends; while I've occasionally been glad it can do $CoolThing, I have also wondered sometimes why my Mathematica install needed to grow from, at some point in the single-digit versions where it was perfectly useful, a few hundred megabytes to now nearly 9 GB.
Mathematica is extremely powerful and very cool. The only thing that isn't cool is the fact that it's commercial.
Edit: Found the video https://youtu.be/H-rnezxOCA8?feature=shared
Pure: a modern functional programming language based on term rewriting - https://news.ycombinator.com/item?id=15782598 - Nov 2017 (34 comments)
Pure is a modern-style functional programming language based on term rewriting. - https://news.ycombinator.com/item?id=3121221 - Oct 2011 (1 comment)
Interview With Albert Gräf - Author of the Pure Programming Language - https://news.ycombinator.com/item?id=2332095 - March 2011 (6 comments)
The Pure programming language - https://news.ycombinator.com/item?id=722580 - July 2009 (12 comments)
On the surface, Pure looks similar to modern-style functional languages of the Miranda, ML and Haskell variety, but under the hood it is a much more dynamic language, with macros and reflective capabilities more akin to Lisp. Pure’s algebraic programming style probably appeals most to mathematically inclined programmers, but its interactive programming environment and easy extensibility also make it usable as a (compiled) scripting language for various application areas, such as graphics, multimedia, scientific, system and web programming.
cited <-: https://agraef.github.io/pure-lang/quickref/pure-quickref.pd...