summaryrefslogtreecommitdiff
path: root/Assignment2
diff options
context:
space:
mode:
Diffstat (limited to 'Assignment2')
-rw-r--r--Assignment2/report/library.bib2
-rw-r--r--Assignment2/src/DTMC.dcl23
-rw-r--r--Assignment2/src/DTMC.icl32
3 files changed, 31 insertions, 26 deletions
diff --git a/Assignment2/report/library.bib b/Assignment2/report/library.bib
index 36ef4c2..dab46d6 100644
--- a/Assignment2/report/library.bib
+++ b/Assignment2/report/library.bib
@@ -19,7 +19,7 @@
pages={326--340}
}
-@inbook{KY76,
+@inbook{KnuthYao1976,
author={Knuth, Donald E. and Yao, Andrew C.},
title={Algorithms and Complexity: New Directions and Recent Results},
chapter={The complexity of nonuniform random number generation},
diff --git a/Assignment2/src/DTMC.dcl b/Assignment2/src/DTMC.dcl
index 9d3e999..a4cf524 100644
--- a/Assignment2/src/DTMC.dcl
+++ b/Assignment2/src/DTMC.dcl
@@ -1,25 +1,18 @@
definition module DTMC
+from Data.Map import :: Map
+from Data.Maybe import :: Maybe
from System.FilePath import :: FilePath
-:: DTMC =
+:: *DTMC =
{ nr_states :: !Int
- , states :: !{State}
+ , states :: !*{Maybe State}
}
:: State =
- { actions :: ![Action]
- , init :: !Bool
+ { state_id :: !Int
+ , transitions :: !Map Int String
+ , init :: !Bool
}
-:: Action =
- { action_id :: !Int
- , transitions :: ![Transition]
- }
-
-:: Transition =
- { to_state :: !Int
- , probability :: !String
- }
-
-parseDTMC :: !FilePath !*World -> *(!DTMC, !*World)
+parseDTMC :: !FilePath !*World -> *(!*DTMC, !*World)
diff --git a/Assignment2/src/DTMC.icl b/Assignment2/src/DTMC.icl
index 7c712e0..3b8b2a7 100644
--- a/Assignment2/src/DTMC.icl
+++ b/Assignment2/src/DTMC.icl
@@ -1,14 +1,21 @@
implementation module DTMC
import StdArray
+import StdBool
import StdClass
import StdFile
+from StdFunc import o
import StdInt
import StdList
import StdString
+import StdTuple
import Data.Error
-from Data.Func import $
+from Data.Func import $, seqSt
+import Data.List
+import qualified Data.Map as M
+from Data.Map import :: Map
+import Data.Maybe
import System.File
import System.FilePath
import Text
@@ -24,24 +31,25 @@ parseDTMCFromLines lines
# states = map parseState $ groupLines "\t" [] lines
=
{ nr_states = toInt nr_states
- , states = {s \\ s <- states}
+ , states = {Just s \\ s <- states}
}
where
parseState :: ![String] -> State
parseState [head:actions] =
- { actions = map parseAction $ groupLines "\t\t" [] actions
- , init = endsWith "init" head
+ { state_id = toInt $ trim $ head % (5,size head-1)
+ , transitions = 'M'.unions $ map (snd o parseAction) $ groupLines "\t\t" [] actions
+ , init = endsWith "init" head
}
where
- parseAction :: ![String] -> Action
+ parseAction :: ![String] -> (!Int, !Map Int String)
parseAction [head:transitions] =
- { action_id = toInt (head % (8, size head-1))
- , transitions = map parseTransition transitions
- }
+ ( toInt (head % (8, size head-1))
+ , 'M'.fromList $ map parseTransition transitions
+ )
where
- parseTransition :: !String -> Transition
+ parseTransition :: !String -> (!Int, !String)
parseTransition s = case split " : " (trim s) of
- [id:prob:_] -> {to_state=toInt id, probability=prob}
+ [id:prob:_] -> (toInt id, prob)
groupLines :: !String ![String] ![String] -> [[String]]
groupLines head current [] = [reverse current]
@@ -49,3 +57,7 @@ where
| startsWith head line = groupLines head [line:current] lines
| isEmpty current = groupLines head [line] lines
| otherwise = [reverse current:groupLines head [line] lines]
+
+Start w
+# (dtmc,w) = parseDTMC "die.drn" w
+= stateElimination dtmc