-
Notifications
You must be signed in to change notification settings - Fork 0
/
Oraculo.hs
46 lines (37 loc) · 1.31 KB
/
Oraculo.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
-- Universidad Simón Bolívar
-- Laboratorio de Lenguajes de Programación I
-- Proyecto 1 - Haskinator
-- Autor: Adolfo Jeritson. 12-10523
module Oraculo (Oraculo(..),
Opciones,
crearOraculo,
prediccion,
pregunta,
opciones,
respuesta,
ramificar
) where
import qualified Data.Map as Map
-- Definición de datos
type Opciones = Map.Map String Oraculo
data Oraculo = Pregunta String Opciones | Prediccion String
deriving (Show, Read)
-- Crear
crearOraculo :: String -> Oraculo
crearOraculo txt = Prediccion txt
-- Accesar
prediccion :: Oraculo -> String
prediccion (Prediccion txt) = txt
prediccion _ = error "El oráculo no es una predicción"
pregunta :: Oraculo -> String
pregunta (Pregunta txt _) = txt
pregunta _ = error "El oráculo no es una pregunta"
opciones :: Oraculo -> Opciones
opciones (Pregunta _ ops) = ops
opciones _ = error "El oráculo no es una pregunta"
respuesta :: Oraculo -> String -> Oraculo
respuesta (Pregunta _ ops) resp = ops Map.! resp
respuesta _ _ = error "El oráculo no es una pregunta"
-- Modificar
ramificar :: [String] -> [Oraculo] -> String -> Oraculo
ramificar strs oracs txt = Pregunta txt (Map.fromList (zip strs oracs))