←back to thread

Learn Prolog Now

(lpn.swi-prolog.org)
207 points rramadass | 2 comments | | HN request time: 0.479s | source
Show context
zemptime ◴[] No.45902006[source]
I've recently started modeling some of my domains/potential code designs in Prolog. I'm not that advanced. I don't really know Prolog that well. But even just using a couple basic prolog patterns to implement a working spec in the 'prolog way' is *unbelievably* useful for shipping really clean code designs to replace hoary old chestnut code. (prolog -> ruby)
replies(1): >>45902088 #
ramses0 ◴[] No.45902088[source]
I keep wishing for "regex for prolog", ie: being able to (in an arbitrary language) express some functional bits in "prolog-ish", and then be able to ask/query against it.

    let prologBlob = new ProLog()
    prologBlob.add( "a => b" ).add( "b => c" )
    prologBlob.query( "a == c?" ) == True
(not exactly that, but hopefully you get the gist)

There's so much stuff regarding constraints, access control, relationship queries that could be expressed "simply" in prolog and being able to extract out those interior buts for further use in your more traditional programming language would be really helpful! (...at least in my imagination ;-)

replies(7): >>45902466 #>>45902575 #>>45902589 #>>45902735 #>>45903753 #>>45904363 #>>45904569 #
dflock ◴[] No.45902575[source]
There are a bunch of libraries that will do this - here's one example of a python one: https://github.com/yuce/pyswip - and a ruby one: https://github.com/preston/ruby-prolog
replies(1): >>45903738 #
1. ramses0 ◴[] No.45903738[source]
Thanks for the reference! `pyswip` is the closest I've seen so far:

    pl.consult("some-facts.pl")
    pl.assertz("new(fact)")
    while pl.Query(...).nextSolution():
        print( X.value )
...will definitely keep it in my back pocket!
replies(1): >>45904999 #
2. dragonwriter ◴[] No.45904999[source]
pyswip is a one-way python-to-SWI-prolog interface; there's also a first-party (maintained as part of SWI-prolog), two-way one called janus-swi.

https://pypi.org/project/janus-swi/

https://www.swi-prolog.org/pldoc/man?section=janus-call-prol...