Exercícios / Paradigma funcional / Dados compostos

Observações


  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.02] Defina uma função que encontre o $k$-ésimo elemento de uma lista. Exemplo

    > (list-ref (list 10 40 70 20) 2)
    70
  5. Defina uma função que devolve os $n$ primeiros elementos de uma lista. Exemplo

    > (take (list 10 40 70 20 3) 2)
    '(10 40)
  6. Defina uma função que remova os $n$ primeiros elementos de uma lista. Exemplo

    > (drop (list 10 40 70 20 3) 2)
    '(70 20 3)
  7. Defina uma função que remova o elemento de uma posição específica de uma lista.

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

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

    > (sub-list (list 10 20 30 40 50) 1 4)
    '(20 30 40)
  10. Define uma função que inverta o elementos de uma lista. Exemplo

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

    > (rotate-left (list 10 20 30 40 50) 2)
    '(30 40 50 10 20)
  12. [pp99 1.01] Defina uma função que devolva o último elemento de uma lista.

  13. [pp99 1.06] Defina uma função que determine se uma lista é palíndromo.

  14. Defina uma função que verifique se um determinado elemento está em uma lista.

  15. Defina uma função que adicione uma constante a cada número de uma lista. Exemplo

    > (lista-add-num (list 2 6 1 4 10) 3)
    '(5 9 4 7 13)
  16. Defina uma função que remova todos os números pares de uma lista.

  17. Defina uma função que encontre o maior valor de uma lista.

  18. Defina uma função que ordene uma lista de números. (Lembre-se de aplicar a receita de projeto, não tente implementar um método de ordenação qualquer, a receita te levará a implementar um método específico).

  19. Defina uma função que inverta uma lista aninhada. Exemplo

    > (reverse* (list (list 2 3) 8 (list 9 (list 10 11) 50) (list 10) 70))
    '(70 (10) (50 (11 10) 9) 8 (3 2))
  20. Defina uma função que avalie uma expressão aritmética em Racket que contenha apenas constantes. Cada operação precisa de exatamente 2 parâmetros. Exemplo

    > (avalie '(+ (* 3 (- 4 5)) (/ 10 2))
    2
  21. Defina uma função que adicione uma constante a cada número de uma árvore binária.

  22. Defina uma função que verifique se uma árvore binária é uma árvore binária de busca. Uma árvore binária de busca tem as seguintes propriedades: 1) A subárvore a esquerda contém valores nos nós menores que o valor no nó raiz. 2) A subárvore a direita contém valores nos nós maiores que o valor no nó raiz. 3) As subárvores a esquerda e a direita também são árvores binárias de busca.

  23. Defina uma função que verifique se um elemento está em uma árvore binária de busca.

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

    > (remove-duplicates (list 1 1 1 1 2 3 3 4 4 5 5 5))
    '(1 2 3 4 5)
  25. Defina uma função que faça a ordenação de uma lista usando o algoritmo mergesort.

    > (mergesort (list 7 3 6 1 2 5 4))
    '(1 2 3 4 5 6 7)
  26. [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)

Referências