Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Ayuda con Pattern matching en Haskell
Autor Mensaje
leaan Sin conexión
Campeon del cubo Rubik
Sin estado :(
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 113
Agradecimientos dados: 98
Agradecimientos: 17 en 14 posts
Registro en: Apr 2011
Mensaje: #1
Ayuda con Pattern matching en Haskell Ejercicios Paradigmas de Programación
Buenas, estoy tratando de hacer la guia 3 de ejercicios, y en varios tengo errores de este tipo . Por ejemplo en este :

1.9. Definir la función diferencias/1 recursivamente, que recibe una lista de números devuelve la
diferencia, en valor absoluto, de cada uno con el siguiente, excepto el último que no tiene
siguiente. P.ej. se espera que

Main> diferencias [5,8,3,1,9]
[3,5,2,8].



Yo la arme asi:
diferencias [] = []
diferencias (x:y:xs) = (y - x) : diferencias (y:xs)


y me tira el error

Main> diferencias [10,6,12]
[-4,6
Program error: pattern match failure: diferencias [12]


No se como arreglar ni como hacer que de siempre positivo, alguna ayuda ?

Gracias =D
28-04-2013 18:17
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
gonnza Sin conexión
User Verde

*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 17.112
Agradecimientos dados: 763
Agradecimientos: 732 en 317 posts
Registro en: Mar 2010
BlogSpot Google+ YouTube
Mensaje: #2
RE: Ayuda con Pattern matching en Haskell
hace 3 años que no toco haskell =P

pero estas definiendo "definicion" (valga la redundancia) de 2 maneras

una para la vacia


definicion []


y la otra para primer y segundo elemento y la lista


definicion(x:y:xs)

(recibe un elemento [el primero], otro [el segundo], y una lista [el resto]

sin embargo, al usarla recursivamente, estas usando otro pattern


definicion(x:y)

ahi no estas mandando la lista, y no va a hacer pattern matching!
ese es el error

para que siempre te de positivo, usa la funcion "abs"


abs



main = print (abs (3 - 5))


[Imagen: v34BEFt.gif]
(Este mensaje fue modificado por última vez en: 28-04-2013 18:32 por gonnza.)
28-04-2013 18:26
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] gonnza recibio 1 Gracias por este post
leaan (28-04-2013)
Motomine Sin conexión
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 61
Agradecimientos dados: 8
Agradecimientos: 14 en 9 posts
Registro en: Feb 2012
Facebook
Mensaje: #3
RE: Ayuda con Pattern matching en Haskell
cuando se trabaja con listas no es importante cuantos parametros mandas, siempre y cuando respetes la lista vacia y la cola (si dice (x:y:xs) y le mandas (x:xs) donde xs tiene al menos un elemento te lo deberia tomar).

El problema en tu codigo es que parece que hiciste "de memoria" el valor inicial para la recursividad, que generalmente es la lista vacia, pero en este caso seria el ultimo valor de la lista (o sea cuando le llega un solo elemento), porque con ese no tiene nada para hacer, ya termino de recorrerla, y haskell trata de hacer [] - x.
El programa se corrigiria haciendo diferencias [y] = [].

Espero que te sirva!

Saludos!

PD: el valor absoluto se toma con la funcion abs x.
28-04-2013 18:42
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Motomine recibio 1 Gracias por este post
leaan (28-04-2013)
leaan Sin conexión
Campeon del cubo Rubik
Sin estado :(
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 113
Agradecimientos dados: 98
Agradecimientos: 17 en 14 posts
Registro en: Apr 2011
Mensaje: #4
RE: Ayuda con Pattern matching en Haskell
Gracias, ya lo pude arreglar thumbup3
28-04-2013 18:44
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.