Une expression composée est une expression ayant au moins un opérateur agissant sur zéro ou plusieurs arguments.
Dans un langage comme C ou Java, les expressions ressemblent parfois à des expressions mathématiques. On écrit alors l'expression 3 * (x + 5) dont le but est d'abord d'additioner la valeur de la variable x avec 5, puis de multiplier le résultat par 3. Cette façon d'écrire une expression s'appelle infixe, indiquant que l'opérateur est placé entre les opérandes. À un opérateur est associée une priorité, permettant de désambiguiser les expressions comme 3 * y + 2. On utilise des parenthèses pour modifier la priorité des opérateurs et certaines parenthèses sont facultatives, comme dans l'expression (3 * x) + 4.
Common Lisp utilise la notation préfixe dans laquelle l'opérateur précède les opérandes. Un opérateur peut avoir un nombre arbitraire d'arguments. Pour désambiguiser des expressions préfixes comme + * 3 4 5 6 (cela peut être 3 * 4 + 5 + 6 ou 3 * 4 * 5 + 6, une expression composée en Common Lisp est obligatoirement entourée de parenthèses. Cela donne donc, soit (+ (* 3 4) 5 6), soit (+ (* 3 4 5) 6).
Pour l'instant, nous allons nous restreindre à des expressions composées dont le premier élément suivant la parenthèse ouvrante est un symbole. Ce symbole est soit le nom d'une fonction, soit celui d'une macro, soit celui d'un opérateur spécial. Les autres éléments sont les arguments de la fonction, la macro, ou l'opérateur spécial. Ces arguments peuvent être des expressions arbitraires.