←back to thread

Clolog

(github.com)
258 points todsacerdoti | 1 comments | | HN request time: 0.334s | source
Show context
sterlind ◴[] No.43696088[source]
really happy to see something of a revival of interest for logic programming lately. it's an extremely powerful tool if you know when to reach for it.
replies(2): >>43696328 #>>43696926 #
MarkMarine ◴[] No.43696328[source]
When would you reach for it?
replies(3): >>43696697 #>>43696708 #>>43696837 #
iLemming ◴[] No.43696708[source]
Scheduling, e.g., course scheduling - allocating rooms, professors, time slots while satisfying constraints; Product configuration systems - helping customers select compatible options for complex products; Genealogical research - querying family relationships and ancestry; Static analysis tools for code - finding bugs or verifying properties without execution; Medical diagnosis systems - inferring conditions from symptoms based on medical knowledge; Travel planning - finding optimal routes with multiple constraints; Legal reasoning systems - determining applicability of laws to specific cases; Natural language interfaces - parsing questions and generating appropriate database queries; Hardware verification - proving correctness of circuit designs; Puzzle solvers - Sudoku, crosswords, logic puzzles;

Basically anything that excels when declarative specification of relationships is more natural than imperative algorithms.

replies(3): >>43697181 #>>43697768 #>>43703416 #
whartung ◴[] No.43697768[source]
Well the bigger question is how big does the system have to be to warrant breaking out a new technique, much less adding a new runtime or other large dependency.

Now, I have no direct experience with any of the common logical programming systems. I have familiarity.

But anytime I came upon anything that might justify such a system, the need just didn’t seem to justify it.

Talking less than 100 rules. Most likely less than a couple dozen. Stacking some IFs and a bit of math, strategically grouped in a couple aptly named wrapper methods to help reduce the cognitive load, and it’s all worked pretty well.

And, granted, if I had solid experience using these systems, onboarding cost would be lower.

When have you found it to be worth cutting over?

replies(3): >>43698127 #>>43700439 #>>43703919 #
1. cess11 ◴[] No.43703919[source]
For a simple problem, the equivalent of one customer demand, something like n-queens, 'placements can't conflict', the difference isn't very large between Prolog and, say, Java.

https://www.metalevel.at/queens/

https://leetcode-in-java.github.io/src/main/java/g0001_0100/...

That is, if you manage to figure out your own special case rule engine rather than a nest of if:s and for:s growing more organically.

If you have ten of these, e.g. more dimensions that would result in conflicts or constraints on where placement is possible in the domain, the Java (or PHP or JavaScript or whatever) solution is likely to turn out rather inscrutable. At least that's my experience in ERP and CRM-adjacent systems where I've spent considerable time figuring out and consolidating many years of piecemeal additions of constraint threading in things like planning and booking tasks and the like.

Sometimes I've scratched up algebraic expressions or standalone Prolog implementations to suss out what simpler code ought to look like.