Li

Listas em Common Lisp

15 exercícios

Sobre Listas

As listas são um tipo de dado muito comum em Common Lisp. Elas são formadas por uma sequência de células cons. Cada car é um elemento da lista e cada cdr é ou a próxima célula cons ou o átomo de terminação.

Uma lista que termina com a lista vazia é chamada de "lista própria".

Uma lista que termina com um átomo que não é a lista vazia é chamada de "lista pontuada" (por causa de como ela é impressa: (cons 'a 'b) ;=> (a . b)).

Uma lista também pode ser circular se alguma célula cons 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). Tenha cuidado ao trabalhar com listas circulares, pois permitir que elas sejam impressas sem vincular *print-circle* a t causará um laço infinito e travará o REPL (neste exemplo, ao especificar :circle t para write, *print-circle será vinculado a t).

Combinando listas

Você pode 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 ao append, existe o nconc, que tem o mesmo resultado, mas tem o efeito colateral de modificar as listas. Tenha cuidado ao usar o nconc, pois ele pode ter efeitos surpreendentes.

Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Listas

A prática está bloqueada

Desbloqueie mais 5 exercícios para praticar Listas