EDIT: seems to be open source, just isn't mentioned on the website https://forge.nouveau.community/nova
I do think I've seen something similar. A language mainly driven off of pattern matching, but I don't recall where. Does anyone know of prior art? Or is this completely novel?
There's also some cross-over with how (parts of) Inform 7 works under the hood.
There’s a book on “Snobol for the Humanities” but it doesn’t have a strong focus on UI; everything at the time it was written used a simple terminal interface like a REPL with no advanced terminal handling.
And also replying to one more comment below. Modal on the developer June's website reminds me of Maude. If feel like term re-rewiting languages have a really cool idea in then that are just waiting to take off. Funny enough I think Maude also has a pattern matching system like Nova. although it's I believe an unordered bag of terms to match against instead of an ordered stack.
[0]: https://xlr.sourceforge.io [1]: https://tao3d.sourceforge.net
I do lose track after that though, in my brain, It looks like the entire second part after the second pipe character should be just one long fact assigned to the stack between tildes, but I think it's adding each one of the bullet-prefixed lines to it.
[0] https://nova-lang.net/introduction-to-nova/sight/#sometimes-...
[0]: http://www.navgen.com/nova/index.html
[1]: https://research.nvidia.com/publication/2013-07_nova-functio...
Homograph = same spelling, different meaning
Homophone = same pronunciation, different meaning
Homonym = same spelling and pronunciation, different meaning
It's also interesting checking their (Greek originating) etymologies and morphologies. Homo- from omós meaning same, -graph/-phone/-onym from gráphō/phōné/ónoma (ō becoming represented by letter ω in modern Greek) meaning writing/sound/name. And, syn-, equivalent to prefix co-, is from syn (preposition) meaning jointly/together. So respectively, literal meanings, being same writing, same sound, same name, co-named.
Hence about hom/synonym, their difference comes from "name" and "word" being distinct concepts. More specifically, in (Aristotelian) philosophy "name" was tied to essence of things, synonym being "same name, same essence" *, homonym being "same name, different essence". In time "name" and "word" were conflated. Moreover synonym evolved semantically, only retaining the "same essence" as "same meaning", and homonym retained its form. Result being one term being about "many words to same meaning" and the other about "one word to many meanings"**.
*So by ancient philosophy my choice of synonym will've been accurate! But you're right they stand opposite, both then and now.
**And then there's the homonym/polysemy distinction for specifying unrelated/related meanings, essentially reviving Aristotelean essence, and the reason why in dictionaries some words (e.g. bank, see[0]) have multiple entries each with multiple meanings.
Not convinced the language would actually be useful, but I like the ideas for portability.
Nova's execution model is a lot friendlier to implement vs Prolog, for one.
One big reason reach for Nova are when I have something -very- state-machine shaped. It is quite good at that.
I'll try to come back later with more explanations
One big difference between Nova and -most- logic languages is that "forgetting" things is a normal part of operation. Nova is also forward chaining, rather than backtracking.
The end result ends up with Nova programs being something closer to an interpreter in a lot of cases, and writing inputs for said interpreter.
So, Nova doesn't do as much on your behalf as Prolog does, deliberately trying to be easier to reason about, and to have more predictable performance characteristics.
Case in point, the pong programs. Looking at the impl, vs a <50 line js impl, this looks more like an assembly language for state, not necessarily something that makes state more visible or readily apparent...
Having a nice dialect for a (is this formally provable?) state machine is nice, but I'm not convinced founding the language from state machines is the correct approach vs merely using a fluent library e.g. https://stately.ai/docs/xstate
Not saying that I'm correct, but would be interesting to hear more of the philosophy of why Nova, vs just a simplisitic implementation of some card game rules...
[0]: https://forge.nouveau.community/nouveau/serpens/src/branch/m...
[1]: https://forge.nouveau.community/yumaikas/myte/src/branch/mai...
A while back there was a rewrite language that was posted (white on black theme site) that was similar but more geared towards coding problems and less on lit programming. I don't remember the name but it was equally as interesting. If anyone recalls what it was it'd be greatly appreciated.
Anyway if the creator is lurking here, examples demonstrating more practical, real world problems (even if still somewhat small) would go a long way.
escanda•2mo ago
For instance, I love org-mode export capabilities to standard formats such as pdfs and other kinds of documents. It makes it real easy to export some formulae or docs for some feature.
Plus org-mode agenda is just superior and awesome.