I keep meaning to learn Prolog, but I've had trouble finding anything that I'm doing that is a good fit for it. I suspect most of that is sapir-whorf-thing on my end; I'm so used to the current tooling that it's influencing how I think about the problem space and so a pattern I'm not super familiar with doesn't enter into my brain.
That said, I never really thought of Erlang as a logic language, so I'm not sure exactly what this reference sheet is actually for?
Erlang was implemented in Prolog and ran on top of it (as a prolog DSL? Not sure to be honest.), until the workloads increased and they switched to a VM model (the BEAM).
I know, but Erlang is pretty different from Prolog in how you actually write it. Erlang is a functional, sometimes-imperative language with heavy concurrency emphasis. Prolog is a lot more "define rules and let the runtime figure out relations". The syntax is superficially similar, and I'm aware that Erlang's original interpreter was Prolog, but they're fundamentally pretty different in how you actually write it.
Prolog is a (the) language based on the logic programming paradigm that also has a procedural interpretation. It's particularly useful for any kind of combinatorical exploration. Quantum Prolog is touting Prolog for "Planning, optimization, diagnostics, and complex configuration" [1] with an extensive example problem for discrete sea freight container shipping optimization (and also for a particular form of Machine Learning).
Prolog was originally invented for parsing natural language (in 1972-ish rule-/logic basic formalisms not LLM or anything fancy), and thus has convenient built-in recursive-decent parsing with backtracking built-in into the language semantics, but also has bottom-up parsing facilities for defining operator precedence parsers. That's why it's very convenient for building DSLs, logical domain knowledge bases, and programming language prototypes such as for Erlang.
Back on my university days, we used to have a professor that wouldn't allow Prolog or Lisp for the compiler development projects, as the implementation language, because it would be super easy.
It would only be super easy due to the requirements being easily enough that the exercises are doable by students using blub languages.
You could easily require Lisp and Prolog, and have the coursework be brutal.
I don't know. I mean, if the difficulty in the course stems from wrestling with code that would be easy to do in Lisp, what are you really learning?
The compiler course I took at university used C and Yacc. In retrospect, the programming work was more of a software-engineering-in-C exercise, with a side attraction related to compiling.
Since a quarter century plus later finds me coding embedded firmware in C, it was valuable from a vocational point of view.
Would be interesting to see how much more involved it is to solve a constraint programming or optimization problem (something you'd actually use prolog for) in the other languages.
That said, I never really thought of Erlang as a logic language, so I'm not sure exactly what this reference sheet is actually for?