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
[Consulta Funcional] Paradigmas De Programacion TP
Autor Mensaje
alejandro.mattioli Sin conexión
Militante
people can dream
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 78
Agradecimientos dados: 49
Agradecimientos: 89 en 16 posts
Registro en: Dec 2013
Mensaje: #1
[Consulta Funcional] Paradigmas De Programacion TP Ejercicios Paradigmas de Programación
Hola gente, alguien me daria una mano, resulta que tengo esta consigna:

sinRepetidos/1, que dada una lista devuelve la misma sin elementos repetidos. Los elementos tienen que aparecer en el mismo orden que en la lista original (la primera ocurrencia de la lista de izquierda a derecha).

y mi resolucion (pd: funciona) pero por la menor fucking idea no la toman como valida, me dijeron de usar un filter, ayuda?

sinRepetidos lista = (reverse.(sacarRepetidos.reverse)) lista
sacarRepetidos [] = []
sacarRepetidos (x:xs)| elem x xs = sacarRepetidos xs
| otherwise = x:sacarRepetidos xs

lightsaber
13-08-2015 22:51
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
lucas_lucas Sin conexión
Campeon del cubo Rubik
||| + |
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 107
Agradecimientos dados: 73
Agradecimientos: 24 en 19 posts
Registro en: Jul 2013
Mensaje: #2
RE: [Consulta Funcional] Paradigmas De Programacion TP
Hola, mira, yo use esta en un tp y esta aprobado

sinRepetidos [] = []
sinRepetidos (x:xs)
| any (== x) (xs) = sinRepetidos xs
| otherwise = (x):sinRepetidos xs
13-08-2015 23:38
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] lucas_lucas recibio 1 Gracias por este post
alejandro.mattioli (13-08-2015)
aaajfabio Sin conexión
Profesor del Modulo A
Retomando la carrera
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 260
Agradecimientos dados: 18
Agradecimientos: 18 en 7 posts
Registro en: Sep 2009
Mensaje: #3
RE: [Consulta Funcional] Paradigmas De Programacion TP
sinRepetidos (x:xs) = filter (not (seRepiteEn xs)) (x:xs)

seRepiteEn lista elemento = elem elemento lista

Creo que eso debería funcar, no tengo un haskell para probarlo asique decime si te sirve xD
(Este mensaje fue modificado por última vez en: 14-08-2015 15:20 por aaajfabio.)
14-08-2015 09:08
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] aaajfabio recibio 1 Gracias por este post
alejandro.mattioli (14-08-2015)
alejandro.mattioli Sin conexión
Militante
people can dream
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 78
Agradecimientos dados: 49
Agradecimientos: 89 en 16 posts
Registro en: Dec 2013
Mensaje: #4
RE: [Consulta Funcional] Paradigmas De Programacion TP
(14-08-2015 09:08)aaajfabio escribió:  sinRepetidos (x:xs) = filter (not (seRepiteEn xs)) (x:xs)

seRepiteEn (x:xs) elem = elem x xs

Creo que eso debería funcar, no tengo un haskell para probarlo asique decime si te sirve xD


Funciona Que genio!! Era mas sencillo del que hice jaja

sinRepetidos lista = invertir (sacarRepetidos lista)

sacarRepetidos [] = []
sacarRepetidos lista | not(elem (last lista) (init lista)) = (last lista):sacarRepetidos (init lista)
| otherwise = sacarRepetidos (init lista)

invertir [ ] = [ ]
invertir (x:xs) = (invertir xs)++[x]

lightsaber
14-08-2015 13:00
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
aaajfabio Sin conexión
Profesor del Modulo A
Retomando la carrera
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 260
Agradecimientos dados: 18
Agradecimientos: 18 en 7 posts
Registro en: Sep 2009
Mensaje: #5
RE: [Consulta Funcional] Paradigmas De Programacion TP
La función seRepiteEn, estaba mal asique la arreglé xD

Lo que hace el filter es decir "de la lista unaLista, dejame los que cumplan unCriterio".
Y para este caso, se traduce como "déjame los que no se repiten --> not(seRepiteEn xs)"

La función seRepiteEn es lo mismo que elem, y le di vuelta los argumentos para aplicar parcialmente con la cola de la lista original en el filter. Además es más declarativo porque está más claro QUÉ es lo que querés que la función haga y no te concentrás tanto en el cómo (cosa que si ocurre en la solución recursiva)

Entonces si vos lo que querés hacer es partir de una lista y REDUCIRLA, eso es sinónimo de filter. Fijate que la implementación de la función filter sería algo como:

filter :: (a -> Bool) -> [a] -> [a]
filter _ [] = []
filter p (x:xs)
| p x = x : filter p xs
| otherwise = filter p xs


Acá se aplica recursividad, que es lo que vos aplicaste justamente en tu primer solución.


Off-topic:
Lo que quiero decir con esto en realidad es que tu código no era feliz, o no nanuiit ??
(Este mensaje fue modificado por última vez en: 14-08-2015 15:25 por aaajfabio.)
14-08-2015 15:15
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
alejandro.mattioli Sin conexión
Militante
people can dream
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 78
Agradecimientos dados: 49
Agradecimientos: 89 en 16 posts
Registro en: Dec 2013
Mensaje: #6
RE: [NUEVA Consulta Funcional] Paradigmas De Programacion TP [Comentario]
(14-08-2015 15:15)aaajfabio escribió:  La función seRepiteEn, estaba mal asique la arreglé xD

Lo que hace el filter es decir "de la lista unaLista, dejame los que cumplan unCriterio".
Y para este caso, se traduce como "déjame los que no se repiten --> not(seRepiteEn xs)"

La función seRepiteEn es lo mismo que elem, y le di vuelta los argumentos para aplicar parcialmente con la cola de la lista original en el filter. Además es más declarativo porque está más claro QUÉ es lo que querés que la función haga y no te concentrás tanto en el cómo (cosa que si ocurre en la solución recursiva)

Entonces si vos lo que querés hacer es partir de una lista y REDUCIRLA, eso es sinónimo de filter. Fijate que la implementación de la función filter sería algo como:

filter :: (a -> Bool) -> [a] -> [a]
filter _ [] = []
filter p (x:xs)
| p x = x : filter p xs
| otherwise = filter p xs


Acá se aplica recursividad, que es lo que vos aplicaste justamente en tu primer solución.


Off-topic:
Lo que quiero decir con esto en realidad es que tu código no era feliz, o no nanuiit ??

jajajajaj no tengo codigos felices xP

che te hago una pregunta mas?

ordenar f [] = []
ordenar f (x:xs) | (f == >) = ordenar ">" [ y | y <- xs, y > x ] ++ [x] ++ ordenar f [ y | y <- xs, y <= x ]
| (f == <) = ordenar "<" [ y | y <- xs, y < x ] ++ [x] ++ ordenar f [ y | y <- xs, y >= x ]

tengo que ordenar, pero no puedo pasarle strings y no se como comparar para saber como ordenar segun criterio

lightsaber
16-08-2015 22:57
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Desert69 Sin conexión
Presidente del CEIT
Sin estado :( / "Anarquia...
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.397
Agradecimientos dados: 203
Agradecimientos: 297 en 186 posts
Registro en: Jun 2008
Mensaje: #7
RE: [Consulta Funcional] Paradigmas De Programacion TP
Ale, creo haber entendido que la idea de tu función ordenar es que si la función es <, ordenar usando <, y si la función fuera >, ordenar usando >. ¿Entendí bien?


> y < son funciones que ya están definidas en Haskell, y que sólo comparan cosas que Haskell sabe comparar (creo que con :t > podés ver el prototipo de la función para ver bien qué cosas puede comparar esa función, supongo que los Ord o algo así).


Pero, por ejemplo, si vas a implementar una función ordenar que recibe por parámetro el criterio de comparación, estaría bueno también que, por ejemplo, puedas ordenar una lista de, no se, Personas. O Autos. O Golondrinas. Y cada una con un criterio que vos quieras.


No se trata tanto de pensar en qué criterios uno podría querer usar para ordenar una lista, si no pensar qué significa ordenar una lista.

Si tuvieras un duende al que le pasás dos cosas y él te sabe contestar cuál de las dos cosas tiene que aparecer antes para estar ordenado, ¿no podrías hacer una función que delege a ese duende todo lo necesario y se encargue estrictamente de ordenar la lista siguiendo el criterio del duende?

Ese es el punto acá: ya hay una función, que te pasan por parámetro (y que en tu caso se llama f) que sabe decirte cuál de dos cosas que le pases va antes. Esa función podría ser <, o podría ser >. Pero también podría ser una función así (hace *años* no escribo Haskell, espero que sea bastante válido mi código):



menorEnergia :: Golondrina -> Golondrina -> Bool
menorEnergia anterior siguiente = (energia anterior) < (energia siguiente) -- aca seguro sobran parentesis, pero bleh



Y entonces, si esa función estuviera definida (y estuvieran definidas las Golondrinas, y la función energia), podría querer hacer una invocación así:



ordenar menorEnergia [(pepita, 50), (pepona, 20), (juanSalvador, 73)]



Y debería obtener la lista ordenada como corresponde.

Y otro podría implementar que existan Satelites, y una función que los compare según la altitud de su órbita, y otra función que compare según el peso del satélite, y lo que quiera.. Y tu función debería seguir sirviendo. Porque mientras te pasen una función que sepa comparar los elementos de la lista que te pasan, tu función ordenar debería funcionar.

Ordenar una lista es siempre igual: lo que cambia según el tipo de cosa que haya adentro de la lista es la forma de comparar a los elementos de esa lista. Por eso lo extraemos a una función aparte, y delegamos en ella esos detalles.


¿Recordás cómo aplicar una función que te pasaron por parámetro? Quizá te puedan servir un poco las páginas de Aplicación y Orden superior de la wiki de Uqbar.

¡Un abrazo!

[Imagen: a2.php]
[Imagen: 971aa6599664453c05cb3e42d58bbc0eo.jpg]
17-08-2015 23:51
Visita su sitio web 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.