Drscheme (ejercicios)

Solo disponible en BuenasTareas
  • Páginas : 23 (5519 palabras )
  • Descarga(s) : 0
  • Publicado : 3 de noviembre de 2010
Leer documento completo
Vista previa del texto
Prácticas de Lenguajes y Paradigmas de Programación

• Práctica 1: Introducción a Scheme
• Práctica 2: Funciones como datos de primer orden
• Práctica 3: Recursión
• Práctica 4: Listas
• Práctica 5: Barrera de abstracción
• Práctica 6: Listas y árboles
• Práctica 7: Macros
• Práctica 8: Construcción de tipos de datos
• Práctica 9: Modelo de entornos• Práctica 10: Tipos de datos mutables

Clase 1 de prácticas: Introducción a Scheme

• Ejercicio 1
• Ejercicio 2
• Ejercicio 3
• Ejercicio 4
• Ejercicio 5
• Ejercicio 6
• Ejercicio 7 (ampliación)
• Ejercicio 8 (ampliación)
• Ejercicio 9 (ampliación)
• Normas de entrega

Ejercicio 1

Lanza el programa DrScheme y, después de haber cargadoel fichero "simply.scm", escribe cada una de las siguientes instrucciones en el intérprete. ¡¡Piensa en los resultados!!. Intenta entender cómo interpreta Scheme lo que escribes.

3 (equal? 'hola "hola")
(+ 1 2) (first hola)
(+ 1 2 3 4) (first (bf 'hola))
(+) (first 234)
(sqrt 25)(butfirst 234)
(* (+ 2 3) 5) (+ (first 34) (last 45))
+ (define pi 3.14159)
'+ pi
'hola 'pi
"hola" (+ pi 7)
(first 'hola) (* pi pi)
(first "hola") (define (square x) (* x x))
(butfirst 'hola) (square 5)(butfirst "hola") (square (+ 2 3))

Ejercicio 2

Predice lo que devolverá Scheme cuando escribas las siguientes expresiones. Después, pruébalas y comprueba si tu predicción era correcta. Si no lo era, intenta comprender por qué.

(define a 3)
(define b (+ a 1))
(+ a b (* a b))
(= a b)
(if (and (> a b) (< b (* a b)))
b
a)
(cond((= a 4) 6)
((= b 4) (+ 6 7 a))
(else 25))
(+ 2 (if (> b a) b a))
(* (cond ((> a b) a)
((< a b) b)
(else -1))

(+ a 1))
((if (< a b) + -) a b)

Ejercicio 3

Escribe un procedimiento llamado segundos->tiempo que tome dos argumentos como entrada: un número en segundos como primer argumento y un literal indicando el tipo alque se quiere transformar (segundos, minutos, horas, días, semanas, meses, años o siglos). Tiene que devolver una palabra con la transformación realizada del número al tipo, concatenando al final de la misma el tipo solicitado en el segundo argumento:

(segundos->tiempo 930 'minutos))
15.5minutos
(segundos->tiempo 45 'segundos)
45segundos
(segundos->tiempo 30000000000'siglos)
9.506426344208686siglos

Ejercicio 4

Escribe un procedimiento llamado quitar-dupl que, cuando se le pase una palabra como entrada, devuelva el resultado de quitar las letras duplicadas de la palabra. Debería funcionar así:

(quitar-dupl 'abcaedeb)
cadeb
(quitar-dupl 'abc)
abc
(quitar-dupl 'aaaabaaa)
ba

Ejercicio 5

En clase de teoría has visto queel símbolo if es una forma especial. Vamos a probar a redefinirlo utilizando el propio if:

(define (new-if predicate then-clause else-clause)
(if predicate then-clause
else-clause))

Vamos a probarlo :

(new-if (= 2 3) 0 5)
(new-if (= 1 1) 0 5)
(new-if (= 1 1) 0 (/ 3 0))

Compara los resultados con la forma especial if. Explica detalladamente quésucede y por qué.

Ejercicio 6

Tenemos las siguientes definiciones:

(define (square x) (* x x))
(define (foo x y) x)
(define (bar x y) (* x y y)) ;;efectúa una llamada a *

Responde a las siguientes cuestiones:

• ¿Cuántas veces se llama a * cuando se evalúa (foo (square (* 1 1)) (square (* 1 1))) en orden normal? ¿Y en orden aplicativo?
• ¿Cuántas veces se...
tracking img