--tp N1 Bar funcional
type Nombre = String
type Agregado = String
type Sabor = String
type Azucar = Integer
type Sabores = (String,String)
type Salsa = String
data Promo = Cafe Nombre Azucar | Gaseosa Sabor Azucar |
Helado Sabores Salsa | AguaMineral deriving Show
esRecomendable promo
|calorias promo < 100 && nombre=="Capuchino"= True
|otherwise=False
ERROR:
Prelude> :reload
Ok, modules loaded: none.
Prelude> esRecomendable (Cafe "Capuchino" 30)
<interactive>:11:1: Not in scope: `esRecomendable'
<interactive>:11:17: Not in scope: data constructor `Cafe'
gtotaro
La pregunta es por que te tira eso ?
Tenes, por un lado, error en la indentacion, en haskell trata siempre de hacerlo con espacios (no tabulaciones), y que queden los "palitos" bien alineados, así:
funcion argumento | argumento == 2 = True
| otherwise = False
Por otro lado, tenes varios errores...no está definida la función calorías, y la variable nombre tampoco
- Off-topic:
- Trata de poner "hola", y describir tu problema un poco, aunque sea, vas a encontrar mejor respuesta acá
te paso como lo defini:
calorias (Cafe nombre azucar) = 3*azucar
calorias (Gaseosa sabor azucar) = azucar
calorias (Helado sabores salsa) | sabores==("cereza","chocolate") && salsa == "chocolate" = 370
| sabores==("chocolate","cereza") && salsa == "chocolate" = 370
| otherwise = 220
calorias (AguaMineral) = 0
Fijate de indentar bien y de definir todas las funciones necesarias.
Este código debería funcionar, probalo.
type Nombre = String
type Agregado = String
type Sabor = String
type Azucar = Integer
type Sabores = (String,String)
type Salsa = String
data Promo = Cafe Nombre Azucar | Gaseosa Sabor Azucar | Helado Sabores Salsa | AguaMineral deriving Show
esRecomendable promo |calorias promo < 100 && nombre promo =="Capuchino"= True
|otherwise=False
calorias (Cafe nombre azucar) = 3*azucar
calorias (Gaseosa sabor azucar) = azucar
calorias (Helado sabores salsa) | sabores==("cereza","chocolate") && salsa == "chocolate" = 370
| sabores==("chocolate","cereza") && salsa == "chocolate" = 370
| otherwise = 220
calorias (AguaMineral) = 0
nombre (Cafe nombre _) = nombre
Finalmente, lo deje así para tome cualquier gusto..
calorias (Cafe _ azucar) = 3*azucar
calorias (Gaseosa sabor azucar) = azucar
calorias (Helado (sabor1,sabor2) salsa) | salsa == "chocolate" && sabor1=="chocolate" || sabor2=="chocolate" = 370
| otherwise = 220
calorias (AguaMineral) = 0
Gracias x la ayuda.
Continuo con el 4)
cualquier cosa,sino te molesta te pregunto...
OJO:
(16-04-2014 16:48)sentey escribió: [ -> ]Tenes, por un lado, error en la indentacion, en haskell trata siempre de hacerlo con espacios (no tabulaciones)
Esto no es cierto. El los tabs funcionan perfecto, de hecho con tabs queda mucho mas prolijo.
(16-04-2014 16:48)sentey escribió: [ -> ], y que queden los "palitos" bien alineados, así:
funcion argumento | argumento == 2 = True
| otherwise = False
Esto es cierto. Otra forma de hacerlo es
funcion argumento
| argumento == 2 = "esDos"
| otherwise = "noEsDos"
[/quote]
Y ojo, porque en la definición de la función que estás haciendo
calorias (Cafe nombre azucar) = 3*azucar
calorias (Gaseosa sabor azucar) = azucar
calorias (Helado sabores salsa) | sabores==("cereza","chocolate") && salsa == "chocolate" = 370
| sabores==("chocolate","cereza") && salsa == "chocolate" = 370
| otherwise = 220
te falta una abstracción. Fijate en todos esos ' == "chocolate" ' ... no te suena a que lo pusiste muchas veces? qué representa que algo de todo eso sea chocolate?