S-expressions are used for both code and data in Lisp. S-expressions were originally intended only as machine representations of human-readable M-expressions, but Lisp programmers soon started using S-expressions as the default notation.
S-expressions can either be single objects such as numbers, Lisp atoms including the special atoms nil
and t
, or cons pairs, written as (x . y). Longer lists are made up of nested cons pairs, for example
(1 . (2 . (3 . nil)))
which can also be written as the easier to read and write (1 2 3)
.
Program code can be written in S-expressions, using prefix notation. An extra piece of syntactic sugar for writing Lisp programs is that the common expression (quote x)
can be written with the abbreviation 'x
.
Example:
(defun factorial (x) (cond ((eq x 1) 1) (t (* x (factorial (- x 1))))))See also: car, cdr, cons