De uma forma geral, as linguagens podem associar nomes a valores. Chamando de variável, associa-se ao conceito de mutabilidade.
tot = 0
for valor in lista
tot = tot + valor
No caso acima, tot
é uma variável. Em Prolog, depois de atribuir um valor para tot
ele não poderá mais ser alterado dentro do escopo. Teria um comportamento parecido com o de uma constante. Já em linguagens funcionais, uma expressão do tipo a = a + 1
nem faz muito sentido. É como uma função recursiva.
Lisp é uma linguagem que pode ter quase tudo. Em Lisp tem o CLOS (implementado no SBCL). De qualquer forma, a definição de linguagem orientada a objetos pode ser meio polêmica. Se não me engano, Clojure não implementa OO. Como tem gente que não gosta de OO mesmo