Programación Funcional - Ayuda ejercicio haskell, por comprension

 
Vista:

Ayuda ejercicio haskell, por comprension

Publicado por uriel (2 intervenciones) el 16/12/2015 03:18:52
Encontre este ejercicio en un final de haskell
El ejercicio dice: Definir por comprension, la funcion maxDif que recibe una lista de enteros y regresa la mayor de las diferencias en valor absoluto entre dos elementos consecutivos de una lista. utilizar abs y maximum, en caso de crear una funcion auxiliar definirla con where

Ejemplo: maxDif [10,-10,1,4,20,-2] -> 22

Lo que hice yo fue esto

maxDif::[Int] -> Int

maxDif xs = maximum [x | y <- xs, n <- [1..(length xs)-1], x <- diferencia y n xs]
where diferencia y n xs = abs y - abs (xs !! n)
me tira error al asignar diferencia a x, entiendo que no esta bien, pero no se como hacerlo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Ayuda ejercicio haskell, por comprension

Publicado por José (4 intervenciones) el 27/01/2016 11:26:23
Aunque sea un poco tarde.

Saludos:

Creo que el error está en que tenemos un número, x, donde debe haber una lista.

Prueba con , where diferencia y n xs = [y - (xs !! n)], así hacemos la lista de x, bueno el abs se pone tambien.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda ejercicio haskell, por comprension

Publicado por uriel (2 intervenciones) el 27/01/2016 20:32:08
Muchas gracias por tomarte el tiempo se responder, se agradece, ahora mismo no lo tengo a mano, pero logre hacerlo funcionar, pero muy parecido a tu ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda ejercicio haskell, por comprension

Publicado por walter (1 intervención) el 14/11/2017 16:21:35
Hola uriel, estoy viendo haskell en la materia de programacion de mi carrera, ing. sistemas, y tambien me dieron este ejercicio en un final, parece mentira jajaja....pero los profesores buscan sus ejercicios en la web, aparte de eso, resolvi el ejercicio y me funciono con este codigo

1
2
3
4
5
maxdif::[Int]->Int
maxdif k=maximum [abs(x-y)|(x,y)<-duplas k]
	where duplas k
		| k == [] = []
		| otherwise = (head k,head(tail k)) : duplas(tail (tail k))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar