Exercícios / Paradigma funcional / Listas

  1. [tspl 2.2.4] O resultado da avaliação da expressão (car (car '((a b) (c d)))) é a. Determine que composição de car e cdr aplicada a '((a b) (c d)) resulta em b, c e d.

  2. [tspl 2.2.6] Desenhe a estrutura interna produzida pela expressão

    (cons 1 (cons '(2 . ((3) . ())) (cons '(()) (cons 4 5))))
  3. [tspl 2.3.1] Defina os passos necessários para avaliar a expressão

    ((car (cdr (list + - * /))) 17 5)
  4. [pp99 1.01] Defina uma função que retorne o último elemento de uma lista.

  5. [pp99 1.02] Defina uma função que encontre o $k$-ésimo elemento de uma lista. Exemplo

    > (list-ref '(10 40 70 20) 2)
    70
  6. [pp99 1.06] Defina uma função que determine se uma lista é palíndromo.

  7. [pp99 1.07] Defina uma função que aplaine (do inglês flatten) uma lista de listas aninhadas. Exemplo

    > (flatten '(1 (2 (3 4) 5)))
    '(1 2 3 4 5)

    Dica: use as funções list? e append.

  8. [pp99 1.10] Defina uma função que remova os elementos consecutivos repetidos de uma lista. Exemplo

    > (remove-duplicates '(1 1 1 1 2 3 3 4 4 5 5 5))
    '(1 2 3 4 5)
  9. [pp99 1.18] Defina uma função que crie uma sub-lista de uma lista com um intervalo especificado. Exemplo

    > (sub-list '(10 20 30 40 50) 1 4)
    '(20 30 40)
  10. [pp99 1.16] Defina uma função que rotacione $n$ posições a esquerda de uma lista. Exemplo

    > (rotate-left '(10 20 30 40 50) 2)
    '(30 40 50 10 20)
  11. [pp99 2.02] Defina uma função que encontre os fatores primos de um número inteiro positivo. Exemplo

    > (prime-factors 315)
    '(3 3 5 7)
  12. Defina uma função que faça a concatenação de duas listas. Exemplo

    > (append '(1 2 3) '(4 5 6))
    '(1 2 3 4 5 6)
  13. Defina uma função que faça a ordenação de uma lista usando o algoritmo mergesort.

    > (mergesort '(7 3 6 1 2 5 4))
    '(1 2 3 4 5 6 7)
  14. Defina uma função que remova o elemento de uma posição específica de uma lista.

    > (remove-at '(3 6 1 2) 2)
    '(3 6 2)
  15. Defina uma função que insira um elemento em uma posição específica de uma lista.

    > (insert-at '(3 6 1 2) 5 2)
    '(3 6 5 1 2)

Referências