bareel
Profesor del Modulo A
Moving Forward.
Ing. en Sistemas
Facultad Regional Buenos Aires
Mensajes: 225
Agradecimientos dados: 49
Agradecimientos: 9 en 7 posts
Registro en: Oct 2011
|
Mensaje: #1
[PdeP] Consulta Funcional
Parciales
Paradigmas de Programación
Hola compañeros! Cómo están?
Estoy preparando paradigma funcional y estoy un poquito perdido ....
En un parcial está el siguiente enunciado:
De cada persona nos interesa saber su edad, su peso y su coeficiente de tonificación. Tenemos algunos ejemplos de socios para realizar las pruebas:
(edad, peso, tonificacion)
pancho = ( 40, 120, 1)
andres = ( 22, 80, 6)
Los ejercicios que se pueden hacer son funciones que dada una persona y una cantidad de minutos,
retorna a la persona luego de realizar el ejercicio. Un ejemplo simple de ejercicio en el cual la persona no
hace nada (y por ende queda igual que al principio sin importar cuánto tiempo lo realice) podría ser:
relax minutos persona = persona
Se pide:
1. Saber si alguien está saludable, lo cual se cumple si no está obeso y tiene una tonificación mayor a 5. Alguien es obeso si pesa más de 100 kilos.
> saludable pancho
False
> saludable andres
True
Lo que veo acá es que no le pasa una tupla como parámetro a la función, sino el nombre de la persona (que a su vez define una tupla). Yo lo definí de la siguiente manera:
saludable:: (Int,Int,Int) -> Bool
saludable (edad,peso,tonificacion) | (peso < 100 && tonificacion > 5) = True
| otherwise = False
Funciona 10 puntos, pero cómo puedo hacer para pasarle el nombre de la persona y no la tupla entera? Cómo debería definir el tipo, o bien, definir la tupla con el nombre pancho y andres?
Si alguien me puede dar una mano, agradecido!!!
Saludos!!
|
|
16-07-2014 20:48 |
|
|
Diego Pedro
Secretario de la SAE
que calor no?
Ing. en Sistemas
Facultad Regional Buenos Aires
Mensajes: 631
Agradecimientos dados: 23
Agradecimientos: 105 en 48 posts
Registro en: May 2011
|
Mensaje: #3
RE: [PdeP] Consulta Funcional
Está bien como lo haces, digamos "pancho" o "andres" son funciones constantes (sí en funcional todo es una función genius), y la idea es que justamente vos lo hagas así, pasándole la tupla de esa forma, para comprobar que sabes el concepto de pattern matching. Porque también existe la posibilidad de definir funciones que te devuelvan la edad, ponele esta sería otra forma (HORRIBLE, aclaro por las dudas) de hacerlo:
obtenerPeso(_,p,_) = p
obtenerTonif(_,_,t) = t
saludable persona = (((<100).obtenerPeso) persona) && (((>5).obtenerTonif) persona)
Pero, de esta forma ni ves lo que es el concepto de pattern matching. Eso en cuanto a tu consulta, ahora una pequeña corrección; siempre que iguales algo a True o False, pensá que existe otra forma de hacerlo porque igual a true una claúsula que ya de por sí te devuelve True o False, es totalmente redundante. Te quedaría así:
saludable (edad,peso,tonificacion) = (peso < 100) && (tonificacion > 5)
|
|
16-07-2014 23:01 |
|
|