#258 in Computers & technology books
Use arrows to jump to the previous/next product
Reddit mentions of Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp
Sentiment score: 9
Reddit mentions: 12
We found 12 Reddit mentions of Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp. Here are the top ones.
Buying options
View on Amazon.comor
Morgan Kaufmann Publishers
Specs:
Height | 9.25195 Inches |
Length | 7.51967 Inches |
Number of items | 1 |
Weight | 3.63101345514 Pounds |
Width | 1.9216497 Inches |
Thank you all for your responses! I have compiled a list of books mentioned by at least three different people below. Since some books have abbreviations (SICP) or colloquial names (Dragon Book), not to mention the occasional omission of a starting "a" or "the" this was done by hand and as a result it may contain errors.
edit: This list is now books mentioned by at least three people (was two) and contains posts up to icepack's.
edit: Updated with links to Amazon.com. These are not affiliate - Amazon was picked because they provide the most uniform way to compare books.
edit: Updated up to redline6561
Some context, I've been living in this house for about 3 years now, my girlfriend and i moved in to take care of the owner of the house. Turns out that he was a big lisp / scheme hacker back in the 80s-90s and had developed a lot of cutting edge tech in his hay day. Anyway, these books have been hiding in his library downstairs...
It was like finding a bunch of hidden magical scrolls of lost knowledge :)
edit: I will compile a list of the books later. I'm out doing 4th of July things.
update: List of books
ISBN: 1-55558-044-0
ISBN: 1-55558-042-4
ISBN: 0-262-56038-0
ISBN: 0-393-95544-3
ISBN: 0-201-17589-4
ISBN: 0-07-000-422-6
ISBN: 0-13-370875-6
ISBN: 0-07-054666-5
ISBN: 0-262-11158-6
ISBN: 1-55860-191-0
ISBN: 1-59059-239-5
ISBN: 0-932376-41-X
ISBN: 0-07-001115-X
ISBN: 0-673-39773-4
ISBN: 0-262-07093-6
ISBN: 0-932376-87-8
ISBN: 0-13-717232-X
ISBN: 0-417-50308-8
ISBN: 0-471-60771-1
ISBN: 0-262-19288-8
ISBN: 0-262-55017-2
ISBN: 0-13-834284-9
ISBN: 1-935182-64-1
ISBN: 978-1-59327-591-4
> I don't think you've actually used any of the modern Lisps.
Not true. You'll find my name in the acknowledgements of Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp. My "Road to Lisp Survey" page is here.
> Common Lisp has CLOS (a ridiculously powerful object system)...
That's a definite plus for Common Lisp, IMHO.
> most Schemes have their own object systems.
Yes, but they aren't standard.
> In addition, there is no Lisp that ships without stuff like hash tables, arrays, structs, etc.
On the contrary; most Schemes ship without them.
> The reason textbooks build this basic stuff from scratch is because they need to demonstrate how you can build complex systems using simple abstractions.
In the cases I'm referring to, that's not the reason at all. The reason is they want to be able to manipulate abstract syntax trees in the obvious way: as sum types. So they simulate the minimum functionality of sum types they need. There's nothing wrong with that per se; it's just unnecessary in languages that already support sum types (and much, much more). Granted, the authors may be well aware of this and chose to use Lisp in their texts so as not to have to explain sum types in a text that's supposed to be about implementing programming languages rather than using one to do so, but it's not obvious that that's a win; see Modern Compiler Implementation in ML for a counterexample.
> If you want to use Lisp for actual production work, I suggest you ditch SICP and pick up something like Practical Common Lisp. If you want to stick with Scheme, the Racket documentation should be more than adequate.
Practical Common Lisp is indeed brilliant. Racket is a wonderful Scheme (and much, much more) implementation. But I've long since moved beyond Lisp.
> Also, obligatory QuickLisp mention. It'll change your life.
For folks who haven't yet tried Common Lisp and want to get going in a hurry, that's absolutely correct.
Some CL-specific resources:
Non-CL:
Others:
I flip back and forth between Clojure and CL periodically (CL is for hobbies, clojure is for work and hobbies), and have mucked with scheme and racket a bit (as well as decent mileage in F#, Haskell, and a little Ocaml from the static typed family). IME, you can definitely tell the difference between a language with support for FP strapped on after the fact, vs. one with it as a core design (preferably with mutable/imperative escape hatches). CL supports FP (closures/functions are values (e.g. lambda), there's a built-in library of non-destructive pure functions that typically operate on lists - or the non-extensible sequence class, and non-standard but general support for optimizing tail recursive functions into iterative ones enables pervasive use of recursion in lieu of iteration), but I think it's less of a default in the wild (not as unfriendly as Python is to FP though). Consequently, it's one paradigm of many that show up; I think there's likely as much if not more imperative/CLOS OOP stuff out there though. I think the alternate tact in clojure, scheme, and racket is to push FP as the default and optimize the language for that as the base case - with pragmatic alternative paradigm support based on the user's desire. Clojure takes it a step farther by introducing efficient functional data structures (based on HAMTs primarily, with less-used balanced binary trees for sorted maps and sets) so you can push significantly farther without dropping down to mutable/imperative stuff for performance reasons (as opposed to living and dying by the performance profiles of balanced binary trees for everything). You'll still find OOP and imperative support, replete with mutation and effects, but it's something to opt into.
In the context of other FP langs, F# and Ocaml do this as well - they provide a pretty rigorous locked-down immutable approach with functional purity as the default, but they admit low-hanging means to bypass the purity should the programmer need to. Haskell kinda goes there but it's a bit more involved to tap into the mutable "escape hatches" by design.
In the end, you can pretty much bring FP concepts into most any languages (e.g. write in a functional style), although it's harder to do so in languages that don't have functions/closures as a first class concept (to include passing them as values). Many functional languages have similar libraries and idioms for messing with persistent lists or lazy sequences as a basic idiom; that's good news since all those ideas and idioms or more or less portable directly to CL (and as mentioned here are likely extant libraries to try to bring these around in addition to the standard map,filter, reduce built-ins). For more focused FP examples and thinking, clojure, racket, and scheme are good bets (absent an unknown resource that exclusively focuses on FP in CL, which would seem ideal for your original query). I think dipping into the statically typed languages would also be edifying, since there are plenty of books and resources in that realm.
Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp by Norvig (PAIP)
I don't want to overhype, but it's been called "The best book on programming ever written".
Oops, maybe I overshot. But anyway, very enlightening even if you're not a Lisp or AI programmer.
The problem with ANSI CL is that I could never shake the feeling that Graham wants Lisp in general to maintain some mystique as language only suited for the very clever, and he teaches the language with intent on keeping it that way. I really enjoyed PCL, but I really do think that Paradigms of Artificial Intelligence Programming needs to get more attention. Granted that I haven't yet finished the mammoth volume, Norvig introduces the language in a clear way that makes it seem more natural (perfect example is that he prefers 'first' and 'rest' rather than the more esoteric 'car' 'cdr'), but additionally he has great 'hand holding' examples that show exactly what makes Common Lisp so powerful and how to organize largers programs in language as well as going over a ton of interesting CS related things. Having gone through these 3 books while I was learn I can definitely say that each had a lot to offer, but I think if I was trapped on an island with just one I would definitley take PAIP.
Paradigms of Artificial Intelligence Programming
My recommendations for books:
Common Lisp remains a touchstone. I highly recommend installing Clozure Common Lisp and Quicklisp and then working through Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp and Artificial Intelligence: A Modern Approach with them. Although I'm now firmly in the statically-typed functional programming world, this has been part of my journey, and it will change how you think about programming.
The code was taken from here, which seems to be from this book originally. It doesn't look too interesting, but it does seem to be taken wholesale from the aforementioned repository.
There's definitely a steep learning curve to get to the mindset of being productive with it. I really enjoy Norvig's "Case Studies" book. I feel like you're right in some ways though... LISP is supposed to be able to be extended even in a language sense but it is just not that intuitive to do it. I have heard interesting things about Perl 6 in this regard but I haven't had time to play with that yet... maybe when i finally completely finish school :)
https://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910