Data Structures

Práctica #7: Recursión con Racket

Objetivo

Durante esta actividad, los alumnos serán capaces de:


Descripción

Esta actividad se debe realizar y entregar por equipos.

En un mismo archivo fuente llamado recursion.rkt, escribe el código de Racket con la solución a los siguientes problemas de programación.

TODOS LOS PROBLEMAS SE DEBEN RESOLVER USANDO RECURSIÓN.

No olvides colocar la matrícula y nombre de todos los miembros del equipo en un comentario en la parte superior de tu archivo fuente.

  1. El procedimiento ultimo regresa el último elemento de una lista que recibe como entrada. La lista de entrada debe tener al menos un elemento. Por ejemplo:

    (ultimo '(1 2 3))       3
    (ultimo '(1))           1
    (ultimo '(4 5 6 7 8))   8
    
  2. El procedimiento sin-ultimo regresa una lista con los mismos elementos de una lista que recibe como entrada pero sin el último elemento. La lista de entrada debe tener al menos un elemento. Por ejemplo:

    (sin-ultimo '(1 2 3))       '(1 2)
    (sin-ultimo '(1))           '()
    (sin-ultimo '(4 5 6 7 8))   '(4 5 6 7)
    
  3. El procedimiento replica toma un número n y cualquier dato x como entradas. Regresa una lista que contiene n copias de x. Por ejemplo:

    (replica 2 3)          '(3 3)
    (replica 5 #t)         '(#t #t #t #t #t)
    (replica 3 '(1 2 3))   '((1 2 3) (1 2 3) (1 2 3))
    (replica 0 '(1 2 3))   '()
    
  4. El procedimiento enlista envuelve entre paréntesis cada elemento del nivel superior de la lista que toma como entrada. Por ejemplo:

    (enlista '(1 2 3))           '((1) (2) (3))
    (enlista '((1 2 3) 4 (5)))   '(((1 2 3)) (4) ((5)))
    (enlista '())                '()
    
  5. El procedimiento mezcla devuelve una lista que es el resultado de intercalar en orden ascendente a los elementos de dos listas de números ordenados que recibe como entrada. Por ejemplo:

    (mezcla '(1 4) '(1 2 8))   '(1 1 2 4 8)
    (mezcla '() '())           '()
    (mezcla '(35 62 81 90 91)
            '(3 83 85 90))     '(3 35 62 81 83 85 90 90 91)
    
  6. El procedimiento prefijo? recibe dos listas a y b, devuelve #t si a es prefijo de b o #f en caso contrario. Por ejemplo:

    (prefijo? '() '(a b c d))            #t
    (prefijo? '(a b c) '(a b c d))       #t
    (prefijo? '(a b c d) '(a b c d))     #t
    (prefijo? '(a b c d e) '(a b c d))   #f
    (prefijo? '(x y z) '(a b c d))       #f
    
  7. El procedimiento inserta toma dos entradas: un número n y una lista lst de números en orden ascendente. Devuelve una nueva lista con los mismos elementos de lst pero insertando n en su lugar correspondiente. Por ejemplo:

    (inserta 14 '())              '(14)
    (inserta 4 '(5 6 7 8))        '(4 5 6 7 8)
    (inserta 5 '(1 3 6 7 9 16))   '(1 3 5 6 7 9 16)
    (inserta 10 '(1 5 6))         '(1 5 6 10)
    
  8. El procedimiento ordena-por-insercion recibe una lista desordenada de números como entrada y devuelve una nueva lista con los mismos elementos pero ordenados de manera ascendente. Se debe utilizar el procedimiento inserta definida en el ejercicio anterior. Por ejemplo:

    (ordena-por-insercion '())
       '()
    (ordena-por-insercion '(4 3 6 8 3 0 9 1 7))
       '(0 1 3 3 4 6 7 8 9)
    (ordena-por-insercion '(1 2 3 4 5 6))
       '(1 2 3 4 5 6)
    (ordena-por-insercion '(5 5 5 1 5 5 5))
       '(1 5 5 5 5 5 5)
    

Upload Instructions

To deliver the recursion.rkt file, please provide the following information:

Request PIN

Solo es necesario que lo entregue en miembro del equipo.