
The research community has failed the "ordinary" interested programmer wanting to learn PLT by not producing an overview/top-down book which brings together the various strands of needed knowledge into a coherent whole. Pierce/Harper/etc's books are simply overwhelming for a beginner without the requisite background knowledge.
PLT approaches the idea of Computation from a formal system (i.e. language) pov and that is what needs to be communicated with the needed logical/mathematical knowledge inline. I have found the following useful in my study of PLT;
Formal Syntax and Semantics of Programming Languages: A Laboratory Based Approach by Ken Slonneger and Barry Kurtz - https://homepage.divms.uiowa.edu/~slonnegr/ and https://homepage.divms.uiowa.edu/~slonnegr/plf/Book/
Understanding Formal Methods by Jean-Francois Monin.
2) You may also find Cliff B. Jones' book Understanding Programming Languages useful.
Excerpt from the preface;
Fortunately, there is a less expensive way of sorting out the meaning of a programming language than writing a compiler. This book is about describing the meaning (semantics) of programming languages. A major objective is to teach the skill of writing semantic descriptions because this provides a way to think out and make choices about the semantic features of a programming language in a cost effective way. In one sense a compiler (or an interpreter) offers a complete formal description of the semantics of its source language. But it is not something that can be used as a basis for reasoning about the source language; nor can it serve as a definition of a programming language itself since this must allow a range of implementations. Writing a formal semantics of a language can yield a far shorter description and one about which it is possible to reason. To think that it is a sensible engineering process to go from a collection of sample programs directly to coding a compiler would be naive in the extreme. What a formal semantic description offers is a way to think out, record and analyse design choices in a language; such a description can also be the basis of a systematic development process for subsequent compilers. To record a description of the semantics of a language requires a notation —a “meta-language”. The meta-language used in this book is simple and is covered in easy steps throughout the early chapters.
The Tiger book, "Compiling with Continuations" and "Lisp in Small Pieces" are some of my favourite ones.
Then if you want to learn about language semantics validation, "Formal Syntax and Semantics of Programming Languages: A Laboratory Based Approach".
as the Amazon app wants to switch country and closes if I don't. (party pooper).
from the Preface:
Laboratory Activities
Chapter 2: Scanning and parsing Wren
Chapter 3: Context checking Wren using an attribute grammar
Chapter 4: Context checking Hollerith literals using a two-level grammar
Chapter 5: Evaluating the lambda calculus using its reduction rules
Chapter 6: Self-definition of Scheme (Lisp) Self-definition of Prolog
Chapter 7: Translating (compiling) Wren programs following an attribute grammar
Chapter 8: Interpreting the lambda calculus using the SECD machine Interpreting Wren according to a definition using structural operational semantics
Chapter 9: Interpreting Wren following a denotational specification
Chapter 10: Evaluating a lambda calculus that includes recursive defini- tions
Chapter 12: Interpreting Wren according to an algebraic specification of the language
Chapter 13: Translating Pelican programs into action notation following a specification in action semantics.
1) Formal Syntax and Semantics of Programming Languages: A Laboratory-Based Approach by Ken Slonneger uses Prolog to design/implement languages - http://homepage.divms.uiowa.edu/~slonnegr/ and https://homepage.cs.uiowa.edu/~slonnegr/plf/Book/
2) Defining and Implementing Domain-Specific Languages with Prolog (PhD thesis of Falco Nogatz) pdf here - https://opus.bibliothek.uni-wuerzburg.de/opus4-wuerzburg/fil...
3) Use Prolog to improve LLM's reasoning HN thread - https://news.ycombinator.com/item?id=41831735
4) User "bytebach" gives an example of using Prolog as an intermediate DSL in the prompt to an LLM so as to transform English declarative -> Imperative code - https://news.ycombinator.com/item?id=41549823
5) Prolog in the LLM Era (a series by Eugene Asahara) - https://eugeneasahara.com/category/prolog-in-the-llm-era/