4 ms·
We have some programming languages in which the programmer specifies a desired outcome, and the system figures out how to do it: Prolog and Haskell are two exa
by c54 11y ago
We have some programming languages in which the programmer specifies a desired outcome, and the system figures out how to do it:
Prolog and Haskell are two examples.
We'll get there!
- tome 11y agoProlog satisfies that description much more closely than Haskell. In fact Haskell is really closer to C than Prolog, if that's the basis for the comparison.
- YeGoblynQueenne 11y agoProlog is probably the only language that gets even close to the original declarative programming promise, of giving the computer a goal and letting it find the way to achieve it. It looks like machine learning might be moving towards fulfilling that promise, btw. A bit of a shame that logic programming is not part of that. Prolog and machine learning would be a match made in heaven, if you ask me (you shouldn't, I'm biased).
- TeMPOraL 11y agoI think it's worth saying explicitly how Prolog does that. It basically runs a DFS on a graph for you. That's it. You can code up a basic Prolog in ~50 lines of Lisp. It's a pretty simple tool. It's also fascinating to look how people try to use it as a general-purpose programming language. To do that, you have to explicitly hack for the DFS running in the background, the one you were not supposed to know about (from the POV of designing your program) because it's meant to abstract things away. You literally have to do flow control on a graph search algorithm to do things like iteration. The point being - Prolog is a useful tool, but it's also a very simple one. It won't do magic for you.
- YeGoblynQueenne 11y agoAh, sure, Prolog is dead simple and not a general-purpose language. Here's a fun little puzzle then. I wrote this predicate: == c(A-B, B-T, A-T). == That's all the predicate definition - nothing else to it. One line, yeah? So, you put it in a Prolog source file, consult it, and then fire queries like this: -- ?-c([a,b|A]-A,[c,d|B]-B,T-B). A = [c, d|B], T = [a, b, c, d|B]. ?- c([a,b|A]-A,[c,d|B]-B,T-[e,f|C]). A = [c, d, e, f|C], B = [e, f|C], T = [a, b, c, d, e, f|C]. ?- c([a,b|B]-B, B-T, [a,b,c,d|T]-T). B = [c, d|T]. ?- c((a,b,A)-A,(c,d,B)-B,T-B). A = (c, d, B), T = (a, b, c, d, B). -- Now, based on your understanding of Prolog from ~50 lines of Lisp- how does that predicate work?
- seanmcdirmid 11y agoRule based AI (Prolog) and machine learning are actually considered to be at opposite sides of the AI coin. As far as I know, no one has been able to combine them into a decent combined experience (you either work with rules or trained models).
- YeGoblynQueenne 11y agoDefine "decent". There's been a lot of work on Inductive Logic Programming, Statistical Relational Learning and generally Logic and Relational Learning (learning Prolog programs from data). First and foremost is PRISM, that started the trend: http://rjida.meijo-u.ac.jp/prism/ http://rjida.meijo-u.ac.jp/prism/ For newer stuff there's ProbLog, latest version of which is actually written in Python: https://dtai.cs.kuleuven.be/problog/ https://dtai.cs.kuleuven.be/problog/ And several other programming languages and frameworks: http://probabilistic-programming.org/wiki/Home http://probabilistic-programming.org/wiki/Home (Though not all of that stuff is specifically logic programming).
- seanmcdirmid 11y agoIt is not as easy as just combining statistics with logic programming. The holy grail would be the ability to seamlessly integrate rule-based reasoning with machine learned models trained on lots of data.