Es del parcial Ratones Paranoicos:
http://www.pdep.com.ar/ParcialFuncionalS...edirects=0
Mi problema esta en como hacer la funcion recursiva del punto 4, sería la tercer función que se llama contieneA
La hice de una forma no recursiva así:
contieneA pass palabra = palabra elem (tails pass)
Pero no me esta saliendo la forma recursiva... alguien me podria dar una mano?
Muchas Gracias
lo que podes hacer para hacerlo recursivo es no usar elem
comprobas con la cabeza de tails pass y si no volves a llamar a contieneA con la cola de tails pass
algo asi
contieneA pass palabra | (head.tails) pass = palabra
| contieneA (tail.tails) pass palabra
contieneA [] _ = false
La resolucion con recursividad yo la haria asi:
contieneA string1 [] = False
contieneA string1 string2
| length string1 > length string2 = False
| take (length string1) string2 == string1 = True
| otherwise = contieneA string1 (drop (length string1) string2)
Ahora que me fijo, está mal, ponele que yo tengo el string "baTuVieja" y el string "TuVieja", si yo le paso esos strings la funcion me va a devolver falso, que pajaaaaa
Creo que funcionaria comparar elemento por elemento hasta el final de la lista, igual te lo dejo a vos, me fui a seguir preparando el final de algoritmos jaja
edit: ahora que miro de nuevo, estan usando tails, no tail, que salame, yo nunca use funciones que sean de un modulo distinto del prelude, no sabia que se podia jajajaj
edit2: re que estaba en el enunciado :facepalm:
Es sencillo si usás las funciones que definiste antes:
contieneA _ [] = True
contieneA [] _ = False
contieneA palabra contenida = empiezaCon palabra contenida || contieneA palabra (tail contenida)
Tratá de hacer vos la funciòn empiezaCon.
Por si no la sacás está acá:
empiezaCon _ [] = True
empiezaCon [] _ = False
empiezaCon (x:xs) (c:cs)
| x == c = empiezaCon xs cs
| otherwise = False
Saludos!