top | item 37396663

(no title)

sritchie | 2 years ago

It's fully rejuvenated in Clojure as "Emmy", with Sussman's support and a bunch of 2D and 3D graphing extensions. See Emmy-Viewers: https://emmy-viewers.mentat.org/ and Emmy: https://emmy.mentat.org/

Thanks to https://2.maria.cloud, everything in SICM and FDG works in the browser as well: https://2.maria.cloud/gist/d3c76ee5e9eaf6b3367949f43873e8b2

discuss

order

tobinfricke|2 years ago

Wow, thanks for this!

sritchie|2 years ago

Of course! And referencing your other comment, during the ~2 year period I've been working on Emmy (on top of work by Colin Smith), I was keen to make the implementation more accessible and well-documented than the original.

There's still not a great map of the project (from primitives to general relativity), but many of the namespaces are written as literate programming explorations: https://emmy.mentat.org/#explore-the-project

Here's the automatic differentiation implementation/essay, for example: https://sritchie.github.io/emmy/src/emmy/differential.html

A rough sketch of the tower is:

- `emmy.value` and `emmy.generic` implement the extensible generic operations

- `emmy.ratio`, `emmy.complex` and `emmy.numbers` fleshes out the numeric tower

- `emmy.expression` and `emmy.abstract.number` add support for symbolic literals

Next we need an algebraic simplifier...

- `emmy.pattern.{match,rule,syntax} give us a pattern matching language

- `emmy.simplify.rules` adds a ton of simplification rules, out of which

- `emmy.simplify` builds a simplification engine

Actually the simplifier has three parts... the first two start in `emmy.rational-function` and `emmy.polynomial` and involve converting an expression into either a polynomial or a rational function and then back out, putting them into "canonical form" in the process. That will send you down the rabbit hole of polynomial GCD etc...

And on and on! I'm happy to facilitate any code reading journey you go on or chat about Emmy or the original scmutils, feel free to write at sam [at] mentat.org, or else visit the Discord I run for the project at https://discord.gg/hsRBqGEeQ4.