top | item 42574819

(no title)

z5h | 1 year ago

Implementing and using a miniKanren was fun and enlightening. And it helped me appreciate how incredibly optimized and fast SWI-Prolog is for relational/logical programming. If someone knows of a miniKanren/language combination that outperforms SWI-Prolog and has good developer ergonomics for relational/logical programming, I’d love to hear about it.

discuss

order

cess11|1 year ago

IIRC SWI-Prolog can be embedded in Python if that's your thing. Interfacing with Scryer Prolog might be require a bit more but ought to be doable, and if they haven't surpassed SWI in some performance metrics yet I'd be surprised.

I'm kind of a lisper but I find it easier to get things done in a proper Prolog than the kanrens.

upghost|1 year ago

It hasn't been merged into the main branch yet, but you can embed Scryer in Python now[1], and it's quite enjoyable. I've also embedded in Java, Clojure, and elisp[2] :)

The Clojure one is bundled up into a library called libscryer-clj, which I haven't released yet, but it operates the same way as libpython-clj[3], libjulia-clj[4], and libapl-clj[5].

As an aside, Scryer is hella ergonomic. clpz+reif is an amazing and amazingly powerful combination, and Scryer's DCG philsophy over double quoted strings is chefs kiss -- it really delivers on the original mission of Prolog. Ediprolog[6] is a fantastic REPL for Emacs.

And honestly if you haven't seen Marcus Triska's work[7], by God you are missing out on one of the true joys of life.

[1]: https://github.com/jjtolton/scryer-prolog/blob/ISSUE-2464/sc...

[2]: https://github.com/mthom/scryer-prolog/discussions/2687

[3]: https://github.com/clj-python/libpython-clj

[4]: https://github.com/cnuernber/libjulia-clj

[5]: https://github.com/jjtolton/libapl-clj

[6]: https://www.metalevel.at/ediprolog/

[7]: https://www.youtube.com/@ThePowerOfProlog

z5h|1 year ago

> if they haven't surpassed SWI in some performance metrics yet I'd be surprised

I was/am also anticipating performance gains from Scryer. Which is why I made a point to request up to date Scryer benchmarks in the SWI forums. Still, for free/open Prolog, SWI-Prolog is hard to beat: https://swi-prolog.discourse.group/t/porting-the-swi-prolog-...