Programación funcional

Curso de programación funcional en Scheme/DrRacket

Solución Q3

Punto 1

;; DEFINICIONES
(define-struct tabla (longitud ancho espesor))
; tabla es una estructura, (make-tabla l a e), en la que l, a y e son números. Si t es de tipo tabla, (tabla-longitud t) devuelve la longitud de la tabla t medida en cms, (tabla-ancho t) devuelve el ancho de la tabla en cms, (tabla-espesor t) devuelve el espesor (o grueso) de la tabla t en cms.

;; peso: tabla, número → número
;; Calcular el peso de una tabla (primer parámetro), cuyo peso en gramos/cc está dado por el segundo parámetro.
;; Ejemplo: (peso (make-tabla 10 100 1) 1.25) → 1250 grm
(define (peso t d)
(local ((define l (tabla-longitud t))
(define a (tabla-ancho t))
(define e (tabla-espesor t))
)
(* l a e d)
)
)

Punto 2

(define (factorial n)
(if (or (= n 0) (= n 1)) 1
(* n (factorial (- n 1)))
)
)
(factorial 4)
-->
(if (or (= 4 0) (= 4 1)) 1
(* 4 (factorial (- 4 1)))
)
(if (or false false) 1
(* 4 (factorial 3))
)
(* 4 (
(if (or (= 3 0) (= 3 1)) 1
(* 3 (factorial 2))
)
)
)
(* 4 (
(if (or false false) 1
(* 3 (factorial 2))
)
)
)
( * 4
(* 3
(if (or (= 2 0) (= 2 1)) 1
(* 2 (factorial 1))
)
)
)
( * 4
(* 3
(if false 1
(* 2 (factorial 1))
)
)
)
( * 4
(* 3
(* 2 1)
)
)
(* 4 (* 3 (* 2 1)) --> (* 4 (* 3 2)) --> (* 4 6) --> 24

Quiz3

Resuelva sin colaboración y sin uso del PC la siguiente pregunta. Cualquier inquietud sobre la pregunta debe dirigírsela exclusivamente al docente, cualquier violación causará la anulación del examen.

Duración 15 minutos. Criterio de evaluación: Perfecta coincidencia con el resultado real de cada expresión y sus pasos intermedios vale 2.5 por pregunta. Coincidencias parciales valdrán proporcionalmente a la coincidencia con el valor real.
Examine detalladamente el siguiente código de definiciones:

Punto 1
Durante el diseño de una aplicación para una ebanistería de tamaño industrial, el arquitecto de software diseñó las siguientes estructuras de datos y a ud. se le ha encomendado desarrollar ciertas funciones que completarán la aplicación a desarrollar. Examine detalladamente las definiciones, la documentación y desarrolle la tarea solicitada:
;; DEFINICIONES
(define-struct tabla (longitud ancho espesor))
; tabla es una estructura, (make-tabla l a e), en la que l, a y e son números. Si t es de tipo tabla, (tabla-longitud t) devuelve la longitud de la tabla t medida en cms, (tabla-ancho t) devuelve el ancho de la tabla en cms, (tabla-espesor t) devuelve el espesor (o grueso) de la tabla t en cms.

Desarrolle la siguiente función:
;; peso: tabla, número → número
;; Calcular el peso de una tabla (datos en el primer parámetro), cuyo peso en gramos/cc está dado por el segundo parámetro.
;; Ejemplo: (peso (make-tabla 10 100 1) 1.25) → 1250 grm

Punto 2
Escriba todas las sustituciones que requiere el llamado a la siguiente función:

(define (factorial n)
(if (or (= n 0) (= n 1))  1
(* n (factorial (- n 1)))
)
)
(factorial 4)

Solución quiz2


(+
(* (expt 5 2) 2)
(* 5 3)
5
)
--> (+ (* 25 2) 15 5) --> (+ 50 15 5) --> 70
;
(raíz? 5 (make-polinomio 1 2 3))
(= (+ (* 1 (expt 5 2))
(* 2 5)
3)
0)
-->
(= (+ (* 1 25)
10
3)
0)
--> (= (+ 25 10 3) 0)
--> (= 38 0) --> false
;
(* (+ 5 1 )
(+ 5 2 )
)
--> (* 6 7) --> 42
;
(make-polinomio x (* 2 x) 1)
--> (make-polinomio 5 10 1) o estructura polinomio con 5 en a, 10 en b y 1 en c.

Quiz2

Resuelva sin colaboración y sin uso del PC la siguiente pregunta. Cualquier inquietud sobre la pregunta debe dirigirsela exclusivamente al docente, cualquier violación causará la anulación del examen.

Duración 15 minutos. Criterio de evaluación: Perfecta coincidencia con el resultado real de cada expresión y sus pasos intermedios vale 1.25 por expresión. Coincidencias parciales valdrán proporcionalmente a la coincidencia con el valor real.

Examine detalladamente el siguiente código de definiciones:

; Definición de funciones
(define-struct polinomio (a b c))
(define (raíz? x p)
(= (+ (* (polinomio-a p) (expt x 2))
(* (polinomio-b p) x)
(polinomio-c p))
0)
)

(define (pol-2 a b c)
(make-polinomio a b c)
)
; Definición de constantes
(define x 5)
(define p1 (pol-2 1 2 3))

A continuación, escriba cómo se reemplaza cada paréntesis intermedio por valores y determine el resultado:
; Expresiones a evaluar
(+
(* (expt x 2) 2)
(* x 3)
5
)
;
(raíz? x p1)
;
(* (+ x (polinomio-a p1) )
(+ x (polinomio-b p1) )
)
;
(make-polinomio x (* 2 x) 1)

Explorando las decisiones en Scheme

En todos los lenguajes hay que trabajar con las decisiones. Las decisiones son el mecanismo por medio del cual un programa hace operaciones dependiendo de situaciones que ocurran durante su ejecución. En ésta entrada voy a describir cómo son las condiciones en Scheme. Disfrútenlo.

[Read the rest of this entry…]

Interesante problema de composición simple

La composición de funciones consiste en usar funciones para obtener un resultado dentro de otra función. En el libro How to design programs, se describe en el capítulo 3 un interesante ejemplo de composición que voy a describir a continuación. Disfrútenlo.

[Read the rest of this entry…]

Ejercicios de Scheme básico

Varios estudiantes me han pedido ejercicios básicos, antes de entrar por favor revise que entiende los fundamentos de la notación prefija y haga algunos de los ejercicios propuestos en esa entrada, luego haga la siguiente lista de ejercicios. Disfrútenlos.

[Read the rest of this entry…]

Notación prefija y expresiones en Scheme

En Scheme se usa una extraña forma de evaluar expresiones, se llama Notación prefija y aunque al principio parece difícil de comprender, con muy poca práctica se comprende perfectamente cómo se evalúan esas expresiones. A continuación voy a explicar un poco la idea. Disfrútenlo.
[Read the rest of this entry…]

Por qué programación funcional

La algoritmia consiste en resolver familias de problemas cuyas características están compuestas por variables concretas, sin embargo, en computación clásica aprender a programar consiste en transformar la definición de un problema (requerimiento) a una definición que se acomode a la arquitectura física de una computadora y que se resuelva manipulando directamente los valores en memoria mediante la CPU (elementos de la arquitectura, lo que constituye una dificultad mayor para un ser humano que no piensa en términos de manipulaciones de memoria ni operaciones básicas de una CPU.
[Read the rest of this entry…]