Práctica 3: Parejas, datos compuestos y listas - dccia

Anuncio
Práctica 3: Parejas, datos compuestos y listas
Ejercicio 1
a) Empezamos definiendo unas funciones auxiliares que es posible que necesitemos.
Construye las funciones:
(suma-izquierda num pareja) : devuelve una nueva pareja en la que se suma
num a la parte izquierda de pareja
(suma-derecha num pareja) : devuelve una nueva pareja en la que se suma
num a la parte derecha de pareja
(suma-parejas p1 p2) : devuelve una nueva pareja con la suma de las partes
izquierdas y las partes derechas
Ejemplo:
(suma-izquierda 4 '(12 . 20))
(16 . 20)
(suma-derecha 4 '(12 . 20))
(12 . 24)
(suma-parejas '(12 . 20) '(-1 . -8))
(11 . 12)
b)
Define una función recursiva (suma-pares-impares lista-num) que devuelva una
pareja cuya parte izquierda sea la suma de todos los números pares de la lista y la parte
derecha la suma de todos sus números impares. En el caso en que ningún número par o impar
deberá devolver 0.
Ejemplos:
(suma-pares-impares '(1 2 3 4 5 6))
(12 . 9)
(suma-pares-impares '(1 3 5 7))
(0 . 16)
Ejercicio 2
a) Dibuja el diagrama box & pointer de la siguiente expresión y explica si genera una lista:
(cons (cons (cons 1 2)
(cons 3 4))
(cons (list 5 6 (cons 7
(cons 8 9)))
(cons 10 11)))
b) Dado el siguiente box & pointer, escribe una expresión en Scheme que lo genere usando
sólo llamadas a cons y explica si la expresión resultante es una lista:
Ejercicio 3
Escribe una función (tres-en-raya? x tablero) que reciba un símbolo y una lista de
tres listas de tres elementos que representa un tablero de tres filas y tres columnas. Cada lista
representa cada una de las filas del tablero.
Por ejemplo, la lista '((x - o)(- x o) (o - x)) representa el tablero
x - o
- x o
o - x
La función deberá comprobar si se ha conseguido tres en raya con el símbolo y el tablero que
se pasa como parámetro. Puedes usar tanto funciones c????r como la función
list-ref . Intenta usar la función más conveniente en cada caso, usando c????r
cuando la posición a la que se quiere acceder es fija y list-ref cuando es variable.
Ejemplos:
(tres-en-raya? 'o '((x
(x
(#t
(tres-en-raya? 'o '((x
(x
(o
#t
(tres-en-raya? 'o '((x
(x
(o
#t
(tres-en-raya? 'o '((x
(x
(o
#f
- o)
- o)
x o)))
x o)
- x)
o o)))
- o)
o x)
x o)))
- x)
o x)
x o)))
Ejercicio 4
Escribe la función recursiva (mayor-que n lista-nums) que recibe un número n y un
lista de números y devuelve una lista con los booleanos resultantes de comparar cada número
de la lista con n .
Ejemplo:
(mayor-que 10 '(1 23 4 -1 12 11 10))
(#f #t #f #f #t #t #f)
Ejercicio 5
Define la función recursiva (intercala-si-suma>n lista1 lista2 n) que reciba dos
listas y un número n . Deberá devolver una nueva lista donde se hayan intercalado los
elementos de ambas sólo si la suma de los elementos en la misma posición es mayor o igual
que `n.
(define l1 '(1 2 3 4 3 4 5 6 7))
(define l2 '(5 1 2 1 2 1 0 2 0))
(intercala-si-suma>n l1 l2 6)
(1 5 6 2 7 0)
Ejercicio 6
Escribe la función (expande pareja1 pareja2 ...) que reciba un número variable de
parejas como argumento donde cada pareja contiene un dato y un número y devuelva una lista
donde se hayan “expandido” las parejas, añadiendo tantos elementos como el número que
indique cada pareja. Todos los argumentos son opcionales.
Ejemplo:
(expande (cons 'a 4) (cons "hola" 2) (cons #f 3))
(a a a a "hola" "hola" #f #f #f)
(expande)
()
Ejercicio 7
Define una función recursiva llamada ocurrencias-elementos que tome como
argumentos dos listas y devuelva una lista de parejas, en donde cada pareja contiene en su
parte izquierda un elemento de la segunda lista y en su parte derecha el número de veces que
aparece dicho elemento en la primera lista. Puedes definir las funciones auxiliares que
necesites.
Ejemplo :
(ocurrencias-elementos '(1 3 6 2 4 7 3 9 7) '(5 2 3))
((5 . 0) (2 . 1) (3 . 2))
Lenguajes y Paradigmas de Programación, curso 2013–14
© Departamento Ciencia de la Computación e Inteligencia Artificial, Universidad de Alicante
Cristina Pomares, Domingo Gallardo
Descargar