Hacker News new | ask | show | jobs
by yters 1957 days ago
Is the big underlying motive for LISP its connection with symbolic AI?
2 comments

First, I still find it very jarring to see "LISP" written that way when referring to Common Lisp, and most other languages in the Lisp family, as "Lisp" has been the common way of writing it for a very long time. That styling, now, is mostly found in older texts on the subject or when talking about LISP and LISP 1.5 and a few other specific implementations.

Second, Common Lisp is a general purpose, multiparadigm language. There's a lot to like about it. If you want to implement conventional procedural algorithms, the language is well-suited to writing in that style. If you want to adopt a more functional and recursive (versus iterative) style, it is similarly well-suited (though somewhat implementation dependent as CL, unlike Scheme, does not mandate tail call elimination, which can bite you in performance). If you want to write in an OO-style, it has a way to do that (though it is different than the OO-styles many people are familiar with so takes some time to learn). And if you like writing DSLs (but don't want to implement a full parser or an interpreter but would rather have something compiled for better performance), it's very well-suited for it.

Third, while it was commonly used for symbolic AI, it is not restricted to that domain. But, if that's what you want to use it for, you should look into the book Paradigms of AI Programming by Norvig (now available for free online) which is pretty much just about implementing now classic symbolic AI programs in CL.

Not anymore, today Common Lisp is generally a very nice language that balances dynamicity and performance quite well, and especially shines in interactive (or REPL-driven) development: https://mikelevins.github.io/posts/2020-12-18-repl-driven/
Also popular implementations do some cool things. The compiler section in the SBCL manual[1] has good details. SBCL's type inference is powerful and you can also convince yourself it's actually working by looking at the output of DISASSEMBLE.

[1] http://www.sbcl.org/manual/index.html

Clojure is my only serious exposure to lisp, and I get jealous when hearing about features like a `breakloop` in Common Lisp.
Why not give it a spin?

There is plenty more to discover in Common Lisp, Clojure has some nice tricks but it's a faint echo as far as raw power goes.

http://www.sbcl.org

there's an interesting recent video on the differences between Cl and Clojure here: https://www.youtube.com/watch?v=44Q9ew9JH_U