UTNianos

Versión completa: Problema con Haskell
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas, alguno me explicaría por qué me tira error de "unexpected ;" en esa linea?
(en el Hugs dice eso, aca tira otro error en el compilador del foro, pero debe ser lo mismo)

Me lei esto

Spoiler: Mostrar
> fun x
> fun 2 = 34

ERROR "test.lhs" (line 2): Syntax error in input (unexpected `;')

The problem here is that the first line is incomplete. Formatting means that the symbol fun in the second line signals by layout that the construct in the first line is finished. The explicit Haskell symbol for the end of a construct is `;'; hence the message.

Another peculiarity of the system is given by

> fun x
> fun 2 = 34

which is not erroneous. It means the same as

> fun x y 2 = 34

because the second use of fun is treated as a variable!
pero no me ayudo mucho.



--Funciones Auxiliares

esVocal :: Char -> Bool
esVocal c = c == 'a' || c == 'e'|| c == 'i'|| c == 'o'|| c == 'u'

esTropical :: String -> Bool
esTropical sabor = (length sabor > 3) && (esVocal (head sabor))

--1

esTradicional :: ((String, Int), Int, Int, Int) -> Bool
esTradicional (("chocolate", cantChocolate), cantHarina, _, _) = cantChocolate > 2 * (cantHarina)
esTradicional (("frutilla", _), _, 3, _)
esTradicional (("mascarpone", cantMascarpone), _, _, _) = (cantMascarpone >= 300) && (cantMascarpone <= 500)

--2

power :: ((String, Int), Int, Int, Int) -> Int
power (sabor, _, _, calorias) | esTropical sabor = 5
| otherwise = calorias

--3

esMasSana :: ((String, Int), Int, Int, Int) -> ((String, Int), Int, Int, Int) -> Bool
esMasSana ( _, _, harina, calorias) ( _, _, harina2, calorias2) | calorias /= calorias2 = calorias < calorias2
| otherwise = harina < harina2




Alguien me lo moveria a seccion academica? Lo postie aca sin querer
Ahi te lo movi.

Por cierto, creo que para la primer funcion (es vocal) te conviene usar elem que te dice si un elemento esta o no en una lista.
Asi te ahorras el hacer la comparacion por OR que (me parece) es muchisimo mas engorrosa.
(ademas esto es mas generico, no te va a pasar con vocales pero si tenes que chequear si algo esta en una lista y esa lista se agranda estarías al horno).


esVocal :: Char -> Bool
esVocal c = elem c ['a','e','i','o','u']



Por cierto...¿En que linea te tira el error el HUGS? No lo veo en el compilador del foro =P (bah, veo otro error que nada que ver).
El error que me tira a mi el compilador del foro debe ser porque usa GHC y se queja de que no hay un main (o sea, compila en vez de interpretar).
El error que me tira es este:

Cita:prog.hs:14:1: Parse error: naked expression at top level

y se soluciona escribiendo


esTradicional (("frutilla", _), _, 3, _) = True

[/offtopic]

(es decir, agregando el True)

Ah, y no lo hice lo de las vocales como lo dijiste porque aun no dieron listas.
Te lo edite porque tenías dos veces lo mismo.

Ok, si, eso es entendible, la función tiene que devolver algo.


esTradicional (("frutilla", _), _, 3, _)


Por si solo no tiene sentido. Tenés un parámetro (que es el objeto...hmm....fruta?) y una funcion, pero sin ningun tipo de retorno.
(15-04-2013 22:08)rulo escribió: [ -> ]Te lo edite porque tenías dos veces lo mismo.

Ok, si, eso es entendible, la función tiene que devolver algo.


esTradicional (("frutilla", _), _, 3, _)


Por si solo no tiene sentido. Tenés un parámetro (que es el objeto...hmm....fruta?) y una funcion, pero sin ningun tipo de retorno.

Que idiota, estaba pensando en Prolog. Muchas gracias!
URLs de referencia