288 lines
15 KiB
HTML
288 lines
15 KiB
HTML
<h1 id="awesome-common-lisp-learning-awesome">Awesome Common Lisp
|
||
Learning <a href="https://awesome.re"><img
|
||
src="https://awesome.re/badge.svg" alt="Awesome" /></a></h1>
|
||
<div data-align="center">
|
||
<p><img src="LISP_logo_mid.png"></p>
|
||
</div>
|
||
<p>This list focuses on resources for learning Common Lisp, especially
|
||
resources that I’ve found useful.</p>
|
||
<p>There are other Awesome Common Lisp lists that focus on other topics:
|
||
- <a href="https://github.com/CodyReichert/awesome-cl">Libraries</a> -
|
||
<a href="https://github.com/vindarel/curated-awesome-cl">Curated
|
||
Libraries</a> - Forked and updated from the above list. - <a
|
||
href="https://github.com/azzamsa/awesome-cl-software">Software</a></p>
|
||
<p>Contributions are welcome. Please read the <a
|
||
href="contributing.md">contribution guidelines</a> for details.</p>
|
||
<h2 id="contents">Contents</h2>
|
||
<ul>
|
||
<li><a href="#how-to-use">How To Use</a></li>
|
||
<li><a href="#lisp-environments">Lisp Environments</a></li>
|
||
<li><a href="#online-references">Online References</a></li>
|
||
<li><a href="#online-books">Online Books</a></li>
|
||
<li><a href="#offline-books">Offline Books</a></li>
|
||
<li><a href="#online-community">Online Community</a></li>
|
||
<li><a href="#library-management">Library Management</a></li>
|
||
<li><a href="#common-lisp-implementations">Common Lisp
|
||
Implementations</a></li>
|
||
<li><a href="#credit">Credit</a></li>
|
||
</ul>
|
||
<h2 id="how-to-use">How To Use</h2>
|
||
<ol type="1">
|
||
<li>Get a Lisp environment.</li>
|
||
<li>Bookmark the <a
|
||
href="http://www.lispworks.com/documentation/common-lisp.html">The
|
||
Common Lisp Hyperspec</a>.</li>
|
||
<li>Download and work through a Lisp book of an appropriate level. Type
|
||
the examples and play with the code. Feel free to switch books and try a
|
||
different one.</li>
|
||
<li>Try out <a
|
||
href="https://exercism.org/tracks/common-lisp">Exercism</a>.</li>
|
||
<li>If you get stuck, find an online community and <a
|
||
href="http://www.catb.org/esr/faqs/smart-questions.html">ask smart
|
||
questions</a>.</li>
|
||
<li>Learn about <a
|
||
href="https://www.quicklisp.org/beta/">Quicklisp</a>.</li>
|
||
<li>At some point, read your Lisp implementation’s manual.</li>
|
||
</ol>
|
||
<h2 id="lisp-environments">Lisp Environments</h2>
|
||
<p>You can run a Lisp implementation directly, but an editing
|
||
environment makes the experience easier. - Prepackaged environments - <a
|
||
href="https://shinmera.github.io/portacle/">Portacle</a> - A portable
|
||
and multiplatform Common Lisp environment. It ships a slightly
|
||
customized Emacs with SLIME, SBCL (a popular Common Lisp
|
||
implementation), Quicklisp and Git. No installation needed, so it’s a
|
||
very quick and easy way to get going. - <a
|
||
href="https://common-lisp.net/project/lispbox/">Lispbox</a> - An IDE
|
||
(Emacs + SLIME), Common Lisp implementation (Clozure Common Lisp) and
|
||
library manager (Quicklisp), pre-packaged as archives for Windows, macOS
|
||
and Linux. Descendant of “Lisp in a Box” <a
|
||
href="http://www.gigamonkeys.com/book/lather-rinse-repeat-a-tour-of-the-repl.html">mentioned</a>
|
||
in Practical Common Lisp. - <a
|
||
href="http://www.lispworks.com/downloads/">Lispworks Personal
|
||
Edition</a> - A non-Emacs based IDE for LispWorks Lisp, with some
|
||
restrictions. - <a href="https://franz.com/products/allegrocl/">Allegro
|
||
Common Lisp</a> - Has a free <a
|
||
href="https://franz.com/downloads/clp/survey">Express Edition</a> IDE,
|
||
and <a
|
||
href="https://www.youtube.com/channel/UCN36UrxtyNBJPaG0kmBJNRw">training
|
||
videos on YouTube</a>. - For advanced users - <a
|
||
href="http://articulate-lisp.com">Articulate Common Lisp</a> - A HOWTO
|
||
for putting together a Lisp environment, and has information on <a
|
||
href="http://articulate-lisp.com/project/abcs.html">useful libraries</a>
|
||
and how to <a
|
||
href="http://articulate-lisp.com/project/new-project.html">structure
|
||
projects</a>. - If you’re an experienced <a
|
||
href="https://www.gnu.org/software/emacs/">Emacs</a> user, you can just
|
||
install <a href="https://common-lisp.net/project/slime/">SLIME</a> and a
|
||
<a
|
||
href="https://common-lisp.net/project/slime/doc/html/Platforms.html#Platforms">supported
|
||
Common Lisp implementation</a>. See the <a
|
||
href="https://common-lisp.net/project/slime/doc/html/">SLIME manual</a>
|
||
for more details. - The Common Lisp Cookbook has more information about
|
||
<a
|
||
href="https://lispcookbook.github.io/cl-cookbook/getting-started.html">installing
|
||
an implementation</a> using an implementation manager like <a
|
||
href="https://github.com/roswell/roswell/wiki">Roswell</a>, or on
|
||
Docker.</p>
|
||
<h2 id="online-references">Online References</h2>
|
||
<ul>
|
||
<li><a
|
||
href="http://www.lispworks.com/documentation/common-lisp.html">The
|
||
Common Lisp Hyperspec (CLHS)</a> - <em>The</em> language reference
|
||
document for Common Lisp. Bookmark it now.
|
||
<ul>
|
||
<li><a
|
||
href="http://www.lispworks.com/documentation/HyperSpec/Body/07_.htm">Chapter
|
||
7</a> - Covers the Common Lisp Object System (CLOS).</li>
|
||
</ul></li>
|
||
<li><a
|
||
href="http://cberr.us/tech_writings/notes/common_lisp_standard_draft.html">The
|
||
ANSI Common Lisp Standard Draft</a> - The last draft version of the ANSI
|
||
INCITS 226-1994 (previously ANSI X3.226-1994) standard.
|
||
<ul>
|
||
<li>The draft is free, the standard isn’t.</li>
|
||
<li>It’s pretty much the same as the official standard, and some people
|
||
prefer it to the CLHS.</li>
|
||
</ul></li>
|
||
<li><a href="http://lispcookbook.github.io/cl-cookbook/">The Common Lisp
|
||
Cookbook</a> - A list of useful Lisp recipes. Also contains a list of
|
||
other online sources of CL information.</li>
|
||
<li><a
|
||
href="https://www.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html">Common Lisp
|
||
the Language (2nd Edition) by Guy L. Steele</a> - A description of the
|
||
Common Lisp language from just before it was standardized by ANSI. Don’t
|
||
use it as a reference.
|
||
<ul>
|
||
<li><a href="https://cliki.net/Getting+Started">Cliki on CLtL2</a> -
|
||
Claims it has more useful descriptions of <a
|
||
href="http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node235.html#SECTION003000000000000000000">LOOP</a>
|
||
and <a
|
||
href="http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node200.html">FORMAT</a>
|
||
than the CLHS does.</li>
|
||
<li><a
|
||
href="https://stackoverflow.com/questions/108537/what-are-the-main-differences-between-cltl2-and-ansi-cl">Stack
|
||
Overflow on CLtL2</a> - Some recommend using CLtL2 for insight and
|
||
inspiration, but to use the CLHS when programming.</li>
|
||
<li><a href="http://linuxfinances.info/info/commonlisp.html#AEN9679">A
|
||
list of differences between CLtL2 and the ANSI Common Lisp
|
||
specification.</a></li>
|
||
<li><a
|
||
href="https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node260.html#SECTION003200000000000000000">Chapter
|
||
28</a> - Covers the Common Lisp Object System.</li>
|
||
</ul></li>
|
||
</ul>
|
||
<h2 id="online-books">Online Books</h2>
|
||
<p>These books that are freely accessible online, arranged roughly in
|
||
order from basic to advanced: - <a
|
||
href="http://www.cs.cmu.edu/~dst/LispBook/">Common Lisp: A Gentle
|
||
Introduction to Symbolic Computation by David S. Touretzky</a> - a good
|
||
introduction for people new to programming. Contains code for really
|
||
useful utilities like <a
|
||
href="http://www.cs.cmu.edu/~dst/Lisp/dtrace/">DTRACE</a> and <a
|
||
href="http://www.cs.cmu.edu/~dst/Lisp/sdraw/">SDRAW</a>. - <a
|
||
href="https://www.cse.buffalo.edu/~shapiro/Commonlisp/">Common Lisp: An
|
||
interactive approach by Stuart C. Shapiro</a> - A textbook that teaches
|
||
mainly through the use of exercises. - <a
|
||
href="http://www.gigamonkeys.com/book/">Practical Common Lisp by Peter
|
||
Seibel</a> - A great introduction for experienced programmers, and tries
|
||
to highlight from the very beginning what makes CL different to other
|
||
languages. - <a href="https://github.com/google/lisp-koans">Common Lisp
|
||
Koans</a> - Not exactly a book, but a set of koans to help you learn the
|
||
language. - <a href="http://www.paulgraham.com/onlisp.html">On Lisp by
|
||
Paul Graham</a> - A great book for intermediately experienced Lispers. -
|
||
<a href="https://letoverlambda.com">Let Over Lambda by Doug Hoyte</a> -
|
||
An advanced book on Lisp Macros. - The first six chapters are available
|
||
online. - <a
|
||
href="https://www.reddit.com/r/lisp/comments/3actsc/let_over_lambda/">Comments
|
||
on Let Over Lambda</a> - Several people recommend that you be
|
||
comfortable with On Lisp before reading this book, and that the start is
|
||
slow. - <a
|
||
href="https://letoverlambda.com/index.cl/guest/chap2.html">The chapter
|
||
on closures</a> - Has several non-trivial examples, and demonstrates the
|
||
power of this feature. - <a
|
||
href="https://github.com/norvig/paip-lisp">Paradigms of Artificial
|
||
Intelligence Programming by Peter Norvig</a> - Has many interesting
|
||
applications of Lisp, but is no longer a good reference for AI.</p>
|
||
<h2 id="offline-books">Offline Books</h2>
|
||
<p>These are books that you’ll have to buy, or borrow from a library. -
|
||
<a href="http://landoflisp.com">Land of Lisp by Conrad Barski, MD</a> -
|
||
A fun introduction to Lisp that uses comics and has you writing games. -
|
||
Available as an <a href="https://www.nostarch.com/lisp.htm">ebook</a>. -
|
||
A couple of the LOOP macros are written <code>for x for y...</code>
|
||
which you can change to <code>for x from 0 for y...</code> to make them
|
||
work in SBCL. - Has an <a
|
||
href="http://landoflisp.com/errata.html">errata page</a>. - Most of the
|
||
book is entertaining and fairly easy, but gets hairy from about Chapter
|
||
18. It doesn’t feel like later chapters introduce much, so I recommend
|
||
switching to a different book at that point. - The Web server example in
|
||
Ch 13, 19 and 20 will only work on CLISP, and needs the addition of HTTP
|
||
response headers to render the HTML properly. - <a
|
||
href="http://www.paulgraham.com/acl.html">ANSI Common Lisp by Paul
|
||
Graham</a> - Good as a reference, covers CLOS, and has several example
|
||
program implementations. - Plaintext versions of <a
|
||
href="http://lib.store.yahoo.net/lib/paulgraham/acl1.txt">Chapter 1</a>
|
||
and <a href="http://lib.store.yahoo.net/lib/paulgraham/acl2.txt">Chapter
|
||
2</a> are available online. - <a
|
||
href="http://weitz.de/cl-recipes/">Common Lisp Recipes by Edmund
|
||
Weitz</a> - A great set of Common Lisp patterns. - <a
|
||
href="https://www.amazon.com/Object-Oriented-Programming-COMMON-LISP-Programmers/dp/0201175894">Object-Oriented
|
||
Programming in Common Lisp by Sonya E. Keene</a> - An in-depth
|
||
description of the CLOS, and shows how to use it with example
|
||
applications. - <a
|
||
href="https://www.amazon.com/Art-Metaobject-Protocol-Gregor-Kiczales/dp/0262610744/">The
|
||
Art of the Metaobject Protocol by Gregor Kiczales, Jim des Rivieres, and
|
||
Daniel G. Bobrow</a> - Describes the CLOS Metaobject Protocol (MOP). -
|
||
<a href="http://metamodular.com/CLOS-MOP/">Chapters 5 and 6 (available
|
||
online)</a> - The specification of a metaobject protocol extension to
|
||
CLOS, by Robert Strandh. - Superseded by the <a
|
||
href="https://clos-mop.hexstreamsoft.com/">modern public domain CLOS MOP
|
||
specification</a> by Jean-Philippe Paradis (<a
|
||
href="https://github.com/Hexstream">Hexstream</a>). - <a
|
||
href="http://www.adamtornhill.com/reviews/amop.htm">Adam Tornhill on
|
||
AMOP</a> - Recommends reading Practical Common Lisp, then
|
||
Object-Oriented Programming in Common Lisp, and then AMOP.</p>
|
||
<h2 id="online-community">Online Community</h2>
|
||
<ul>
|
||
<li>The <a href="http://cliki.net">Cliki</a> - The Common Lisp Wiki. A
|
||
great resource for all things CL. Has a great <a
|
||
href="http://cliki.net/Getting+Started">Getting Started</a> page and an
|
||
extensive list of <a href="http://cliki.net/Lisp%20books">Lisp
|
||
books</a>.</li>
|
||
<li>The #clschool, #lisp, #ccl, #sbcl and <a
|
||
href="https://www.cliki.net/IRC">other rooms</a> on the <a
|
||
href="https://libera.chat/">Libera.Chat</a> network are great places for
|
||
learning about Common Lisp. (<a
|
||
href="https://gist.github.com/joepie91/df80d8d36cd9d1bde46ba018af497409">Freenode
|
||
should be avoided.</a>)</li>
|
||
<li><a href="http://www.reddit.com/r/lisp/">Lisp Subreddit</a> - An
|
||
active community, and has loads of useful links and reference documents
|
||
in the sidebar.
|
||
<ul>
|
||
<li><a href="https://www.reddit.com/r/Common_Lisp">Common Lisp
|
||
Subreddit</a> - The Subreddit for Common Lisp.</li>
|
||
</ul></li>
|
||
<li><a href="https://exercism.org/tracks/common-lisp">Exercism’s Common
|
||
Lisp track</a> - An excellent way to learn the language through
|
||
practice, have your code reviewed, and to discuss solutions with other
|
||
people.</li>
|
||
<li><a href="https://discord.gg/7tSq5EaA6Z">Lisp Discord server</a> - Is
|
||
a Discord for Lisp. Has a channel dedicated to Common Lisp and will
|
||
happily answer questions.</li>
|
||
</ul>
|
||
<h2 id="library-management">Library Management</h2>
|
||
<p>These aren’t libraries, but can help you find and install other
|
||
libraries. - <a href="https://www.quicklisp.org/beta">Quicklisp</a> - A
|
||
package management platform for Lisp libraries. - <a
|
||
href="http://quickdocs.org">Quickdocs</a> - Documentation for projects
|
||
in Quicklisp. - <a
|
||
href="http://borretti.me/article/common-lisp-sotu-2015">State of the
|
||
Common Lisp Ecosystem, 2015</a> - Article about what libraries you
|
||
should use, and why. - <a
|
||
href="http://articulate-lisp.com/project/abcs.html">Articulate Common
|
||
Lisp</a> - Lists some useful libraries.</p>
|
||
<h2 id="common-lisp-implementations">Common Lisp Implementations</h2>
|
||
<p>This section lists some common CL implementations and their manuals
|
||
in alphabetical order. Unless otherwise noted, these are free software
|
||
implementations. See also the Cliki’s list of <a
|
||
href="https://www.cliki.net/Common%20Lisp%20implementation">free
|
||
software Common Lisp Implementations</a>. - <a
|
||
href="https://franz.com/products/allegrocl/">Allegro Common Lisp
|
||
(ACL)</a> - Commercial, but has a free <a
|
||
href="https://franz.com/downloads/clp/survey">Express Edition</a>. - <a
|
||
href="https://franz.com/support/documentation/">ACL manual</a> - <a
|
||
href="https://www.youtube.com/channel/UCN36UrxtyNBJPaG0kmBJNRw">Training
|
||
videos on YouTube</a> - <a href="https://clisp.sourceforge.io">CLISP</a>
|
||
- <a href="https://clisp.sourceforge.io/impnotes.html">CLISP Manual</a>
|
||
- <a href="https://ccl.clozure.com">Clozure Common Lisp (CCL)</a> - <a
|
||
href="https://ccl.clozure.com/manual/">CCL manual</a> - <a
|
||
href="https://www.cons.org/cmucl/">Carnegie Mellon University Common
|
||
Lisp (CMUCL)</a> - <a
|
||
href="https://www.cons.org/cmucl/doc/index.html">CMUCL manual and other
|
||
useful information</a> - <a
|
||
href="https://common-lisp.net/project/ecl/">Embeddable Common Lisp
|
||
(ECL)</a> - <a
|
||
href="https://common-lisp.net/project/ecl/static/manual/">ECL manual</a>
|
||
- <a href="http://www.lispworks.com/products/index.html">LispWorks</a> -
|
||
Commercial, but as mentioned previously, has a <a
|
||
href="http://www.lispworks.com/downloads/index.html">Personal
|
||
Edition</a> with minor limitations. - <a
|
||
href="http://www.lispworks.com/documentation/index.html">LispWorks
|
||
manual</a> - <a href="http://www.sbcl.org">Steel Bank Common Lisp
|
||
(SBCL)</a> - My personal favorite. - <a
|
||
href="http://www.sbcl.org/manual/index.html">SBCL manual</a> - <a
|
||
href="http://web.archive.org/web/20171014210404/http://www.scieneer.com/scl/">Scieneer
|
||
Common Lisp (SCL)</a> - A commercial Linux and Unix implementation, but
|
||
has an unrestricted free evaluation and non-commercial use version. - <a
|
||
href="http://web.archive.org/web/20171014210404/http://www.scieneer.com/scl/doc/">SCL
|
||
manual</a></p>
|
||
<h2 id="credit">Credit</h2>
|
||
<p>I got a lot of the information from <a
|
||
href="https://stackoverflow.com/a/7224914/1005039">Rainer Joswig’s Stack
|
||
Overflow answer on learning Common Lisp</a>, and from the now-defunct
|
||
Stack Overflow Documents site. The <a
|
||
href="https://cliki.net/Getting%20Started">Cliki’s Getting Started</a>
|
||
page was also invaluable.</p>
|
||
<p><a
|
||
href="https://github.com/GustavBertram/awesome-common-lisp-learning">commonlisplearning.md
|
||
Github</a></p>
|