Para se alterar o valor de uma variável Lisp possui um operador de atribuição. A forma especial setq recebe uma variável e um valor e atribui o valor à variável.
> (let ((x 2)) (setq x (+ x 3)) (setq x (* x x)) (setq x (- x 5)) x) 20
Cada vez que se realiza uma atribuição, perde-se o valor anterior que a variável possuía. Muito embora a forma especial setq, como todas as funções e forma especiais, retorne um valor, esse valor não possui qualquer interesse. O operador de atribuição serve apenas para modificar o estado de um programa, neste exemplo, alterando o valor de x. Por este motivo, a atribuição assemelha-se mais a um comando do que a uma função. A atribuição é uma ordem que tem de ser cumprida e de que não interessa o resultado. A ordem é a operação fundamental da programação imperativa, em que um programa é composto por sucessivos comandos. Neste estilo de programação, os comandos funcionam por efeitos secundários. O valor de cada comando não tem interesse e muitas vezes nem sequer tem significado falar dele.