3 ms·
Personally, I like programming languages that force me to think about a problem completely differently than what I'm used to. So for mind-expansion I would sugg
by i_don_t_know 10y ago
Personally, I like programming languages that force me to think about a problem completely differently than what I'm used to. So for mind-expansion I would suggest Smalltalk and then Prolog, because they are completely different from Haskell, much more different than Lisp/Scheme is.
I'm not an expert on lisp and AI. From what I understand lisp has been the traditional go-to language for AI research, and for "classic" AI you probably cannot go wrong with learning at least the basics of lisp. However, a lot of recent AI research seems to be on neural networks, deep learning, and statistics. I don't know how important lisp is in those fields.
- lispm 10y agoIf you use Lisp, you have Prolog and Smalltalk, too. Built-in.
- i_don_t_know 10y agoYes, and while that may be an advantage for actual use of the language in practice, I think it's a disadvantage for learning the concepts behind OOP and logic programming. Prolog forces you to solve your problem with logic programming. You cannot take the easy way out and solve it (wholly or partially) in some other way that you already know. Likewise, Smalltalk forces you to solve the problem with OOP. Haskell forces you to deal with pure functions and lazy evaluation. APL forces you to solve the problem with vector operations. Some of the approaches and solutions may be clumsy and worse than what you can do with a mix or some other programming paradigm. But I thought the point of the exercise was to learn the different programming paradigms, and in that context I prefer programming languages that do not offer alternative ways of solving the problem. I prefer a more restrictive approach and lisp is anything but restrictive (CLOS, kanren, etc). Also I find that a different surface syntax helps me context switch to a different programming paradigm. For example, when I see s-expressions my mind switches to scheme and thinks accordingly, and that would be a distraction to me if I wanted to program imperatively, for example. When I see Prolog, I have a hard time thinking in terms of OOP. Maybe that's just me. The reason for suggesting Smalltalk first was that it's farther away from Haskell than Prolog (Prolog clauses can appear similar to functional programming). Switching to Prolog after Smalltalk is another big jump. I like big jumps. They help me switch context. The OP may be different, I don't know.
- tome 10y agoAt a slight tangent, does anyone participating in this discussion know of a good resource for explaining the kinds of things that people use kanren for?
- lispm 10y agoLispWorks Prolog can use Prolog syntax inside Lisp: $ lispworks LispWorks(R): The Common Lisp Programming Environment Copyright (C) 1987-2014 LispWorks Ltd. All rights reserved. Version 7.0.0 CL-USER 1 > (require "prolog") T CL-USER 2 > (in-package "CP-USER") #<The CP-USER package, 0/16 internal, 0/16 external> CP-USER 3 > (erqp) ?- consult(appenda). YES. OK. ?- appenda([1,2,3],[14,15,16],L1). L1 = [1,2,3,14,15,16] OK.