I was in a class recently that had a session on logic programming, emphasizing Prolog. I was aware of Clojure having core.logic and so I looked into that one with its mini-kanren implementation. While I appreciate that there are major fields – NLP, AI – that make use of logic programming, it is equally striking how strange a methodology it is compared to conventional programming (e.g. goals, predicates, relations instead of functions, strange binding procedures, etc). Our toy project was to look at family relations (with facts like “father” and “mother,” then defining relations based on those facts like “sibling” and “cousin”) and throughout the effort I could only think how much easier this would be using regular maps and value checks.
Has anyone here worked productively in logic programming? What sorts of tasks does it facilitate more effectively than standard Clojure/functional programming?