Could someone enlighten me on the merits and/or drawbacks on using logic programming concepts to extend imperative languages via either Constraint Handling Rules (CHR), Mini-Kanren, or programming a Picat implementation in the language?
From a brief study, it appears CHR is designed for embedding into other languages, including imperative ones.
For example, C and Java are listed here:
https://about.chrjs.net/about-chr/systems/
Mini-Kanren is the foundation of logic programming in Clojure and some libraries exist for Common Lisp.
Picat seems to be a totally separate, multi-paradigm language that encourages declarative programming. I had thought there were multiple implementations of it, but I cannot find them at the moment.
It would seem that, in terms of implementation, Picat would be the most difficult. I don’t have any good intuition on how hard it would be to implement mini-Kanren vs CHR. Both seem less difficult than Picat, but mini-Kanren seems like it would offer a bit more in terms of benefits (probabilistic programming, tabling, etc.)