Li

Listas em Common Lisp

15 exercícios

Sobre Listas

As listas são um tipo de dados muito comum em Common Lisp. São constituídas por uma sequência de células cons. Cada car é um elemento da lista e cada cdr é ou a célula cons seguinte ou um átomo terminal.

Uma lista que termina na lista vazia chama-se «lista própria».

Uma lista que termina num átomo que não é a lista vazia chama-se «lista pontilhada» (devido à forma como é impressa: (cons 'a 'b) ;=> (a . b)).

Uma lista também pode ser circular se a célula cons de algum ponto da lista for o cdr de uma célula cons posterior. Por exemplo: (let ((x (list 1))) (setf (cdr x) x) (write x :stream t :circle t) :done). Tem cuidado ao trabalhar com listas circulares, porque permitir que sejam impressas sem ligar *print-circle* a t provoca um ciclo infinito e bloqueia o REPL (neste exemplo, ao especificar :circle t em write, *print-circle fica ligado a t).

Combinar listas

Podes chamar append com qualquer número de listas, incluindo 1 ou 0:

(append '(a b c) '(1 2 3)) ; => (A B C 1 2 3)
(append '(a b c) '()))     ; => (A B C)
(append '(a b c))          ; => (A B C)
(append)                   ; => ()

Como alternativa a append existe nconc, que dá o mesmo resultado, mas tem como efeito secundário a modificação das listas. Deves ter cuidado ao usar nconc, pois pode ter efeitos surpreendentes.

Editar via GitHub A ligação abre numa nova janela ou separador

Aprende Listas

A prática está bloqueada

Desbloqueia mais 5 exercícios para praticares Listas