At some point you should also learn Prolog and Haskell to have a well-rounded education.
I’m not sure knowing Prolog is actually useful, and I speak as someone who has been teaching Prolog as part of an undergraduate AI course for the last few years, and who learned it way back when Marseilles Prolog didn’t even support negative numbers and I had to write my own code just to do proper arithmetic. (I’m not responsible for the course design, I’m just one of the few people in the department who knows Prolog.)
Functional languages, imperative languages, object-oriented languages, compiled languages, interpreted languages: yes. Even some acquaintance with assembler and the techniques that are used to execute all the other languages, just so you know what the machine is really doing. But Prolog remains a tiny, specialised niche, and I’m inclined to agree with what Paul Graham says of it: it’s a great language for writing append, but after that it’s all downhill.
I mean learning Prolog in the way it would be taught in a “Programming Languages” course, not as an attempt at facilitating AI. Two angles are important here: (1) programming paradigm features: learning the concept of late-bound / dataflow / “logical” variables. http://en.wikipedia.org/wiki/Oz_(programming_language) is an OK substitute. (2) logic, which is also something to be taught in a “Programming Languages” context, not (only) in AI context. With Prolog, this means learning about SLD-resolution and perhaps making some broader forays from there. But one could also explore connections between functional programming and intuitionistic logics.
OCaml is my favorite language. At some point you should also learn Prolog and Haskell to have a well-rounded education.
I’m not sure knowing Prolog is actually useful, and I speak as someone who has been teaching Prolog as part of an undergraduate AI course for the last few years, and who learned it way back when Marseilles Prolog didn’t even support negative numbers and I had to write my own code just to do proper arithmetic. (I’m not responsible for the course design, I’m just one of the few people in the department who knows Prolog.)
Functional languages, imperative languages, object-oriented languages, compiled languages, interpreted languages: yes. Even some acquaintance with assembler and the techniques that are used to execute all the other languages, just so you know what the machine is really doing. But Prolog remains a tiny, specialised niche, and I’m inclined to agree with what Paul Graham says of it: it’s a great language for writing append, but after that it’s all downhill.
I mean learning Prolog in the way it would be taught in a “Programming Languages” course, not as an attempt at facilitating AI. Two angles are important here: (1) programming paradigm features: learning the concept of late-bound / dataflow / “logical” variables. http://en.wikipedia.org/wiki/Oz_(programming_language) is an OK substitute. (2) logic, which is also something to be taught in a “Programming Languages” context, not (only) in AI context. With Prolog, this means learning about SLD-resolution and perhaps making some broader forays from there. But one could also explore connections between functional programming and intuitionistic logics.