Before you start coding and going deeper into SBCL, Quicklisp, Emacs, SLIME, and others, please take a while to get an overview of Lisp.
Basics:
- Lisp (short for LISt Processor),
- Created in 1958 by John McCarthy,
- It is the second-oldest high-level programming language still in common use, after Fortran,
- A pioneer of functional programming and symbolic computation,
- Lisp has influenced many modern languages, including Java, Kotlin, and Groovy.
Core Features:
Paul Graham identifies nine important aspects of Lisp that distinguished it from existing languages like Fortran:
- Conditionals not limited to goto,
- First-class functions,
- Recursion,
- Treating variables uniformly as pointers, leaving types to values,
- Garbage collection,
- Programs made entirely of expressions with no statements,
- The symbol data type, distinct from the string data type,
- Notation for code made of trees of symbols (using many parentheses),
- Full language is available at load, compile, and run times.
Syntax:
- Lisp uses a highly minimalist syntax,
- Code is written in nested parentheses, with the operator at the beginning of each expression:
Adds numbers, output: 6(+ 1 2 3)
Function to square a number(defun square (x) (* x x))
Calls the square function, output: 25(square 5)
Dialects:
There are many Lisp dialects, with the most prominent being:
- Common Lisp: A general-purpose, multi-paradigm language with extensive libraries,
- Scheme: A minimalist dialect emphasizing simplicity and mathematical elegance,
- Clojure: A modern dialect running on the JVM, integrating smoothly with Java and Kotlin ecosystems. It supports immutable data structures and concurrency.
Sources: