3 ms·
This type of things is based solved with Prolog. The issue is that folks are trying to solve declarative problems using procedural/object oriented/functional
by segmondy 8y ago
This type of things is based solved with Prolog. The issue is that folks are trying to solve declarative problems using procedural/object oriented/functional programming. Because we store data in databases, we have twisted it into a database problem but it's not.
book(Room, Rate):-
availableBuildings(Buildings),
availableRooms(Buildings, Rooms),
rate_less_than(Rate, Rooms)
cheapest(Rooms, Room).
However complex you think this problem is, it's pretty simple. It's a very old problem, scheduling, well understood and solved. Using the wrong tool makes it a nightmare. Using the right tool makes it ridiculously easy. The solution is not the database, but the language.
- mfrager 8y agoVery interesting... my inclination is that you’re probably right. Any tips on how to learn to use Prolog with pulling data from external sources?
- segmondy 8y agoProlog's DB is just a text file. You can construct a DB file by using SQL to select into a text file. You can use ODBC http://www.swi-prolog.org/pldoc/doc_for?object=section(%27packages/odbc.html%27) http://www.swi-prolog.org/pldoc/doc_for?object=section(%27pa... You can use CSV http://www.swi-prolog.org/pldoc/man?section=csv http://www.swi-prolog.org/pldoc/man?section=csv I've used the above methods. For RDF, you can load with various methods even over http http://www.swi-prolog.org/pldoc/man?section=rdflib http://www.swi-prolog.org/pldoc/man?section=rdflib
- e12e 8y agoI too would like to hear about getting facts from an sql db, and writing back results from prolog - it's hard to see how a prolog text file can/could be used as a source for transactional problems like booking (making sure the answer you find can be committed while still valid). I suppose one could have a prolog service that came up with suggestions, ordered by preference, and then attempt committing them in order to the actual transactional storage layer. But I don't see how you could avoid re-implementing transactions. With an rdms you could look for options, and attempt a booking in a transaction, and have a fairly established way to resolve conflicts.