diff options
| author | Gregor Kleen <gkleen@yggdrasil.li> | 2015-11-13 19:01:12 +0100 |
|---|---|---|
| committer | Gregor Kleen <gkleen@yggdrasil.li> | 2015-11-13 19:01:12 +0100 |
| commit | d1297aee25605ebc35124023c2523ce90abbc787 (patch) | |
| tree | 00db64a44a7128e8133079de6e7bb9c50672315e | |
| parent | c963b8b1dcd9c2d453e37b28e9fef4f9790ae814 (diff) | |
| download | uni-d1297aee25605ebc35124023c2523ce90abbc787.tar uni-d1297aee25605ebc35124023c2523ce90abbc787.tar.gz uni-d1297aee25605ebc35124023c2523ce90abbc787.tar.bz2 uni-d1297aee25605ebc35124023c2523ce90abbc787.tar.xz uni-d1297aee25605ebc35124023c2523ce90abbc787.zip | |
Work on FFP A4-3
| -rw-r--r-- | ws2015/FFP/blaetter/04/FFP_U04_Lazy.hs | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/ws2015/FFP/blaetter/04/FFP_U04_Lazy.hs b/ws2015/FFP/blaetter/04/FFP_U04_Lazy.hs index 8051ef9..b84ad0b 100644 --- a/ws2015/FFP/blaetter/04/FFP_U04_Lazy.hs +++ b/ws2015/FFP/blaetter/04/FFP_U04_Lazy.hs | |||
| @@ -17,7 +17,9 @@ import qualified Data.Map as Map | |||
| 17 | import Data.Map (Map) | 17 | import Data.Map (Map) |
| 18 | import qualified Data.Set as Set | 18 | import qualified Data.Set as Set |
| 19 | import Data.Set (Set) | 19 | import Data.Set (Set) |
| 20 | import qualified Data.List as List | 20 | import qualified Data.List as List ((\\)) |
| 21 | |||
| 22 | import Data.Maybe (fromMaybe) | ||
| 21 | 23 | ||
| 22 | ---- A4-1 Verzögerte Auswertung | 24 | ---- A4-1 Verzögerte Auswertung |
| 23 | -- Gegeben ist folgendes Programm: | 25 | -- Gegeben ist folgendes Programm: |
| @@ -158,6 +160,8 @@ rel2S = Set.fromList . rel2 | |||
| 158 | transClS :: (Ord a) => (a -> Set a) -> Set a -> Set a | 160 | transClS :: (Ord a) => (a -> Set a) -> Set a -> Set a |
| 159 | transClS rel xs = build xs Set.empty | 161 | transClS rel xs = build xs Set.empty |
| 160 | where | 162 | where |
| 163 | res = build xs Set.empty | ||
| 164 | |||
| 161 | build xs known | 165 | build xs known |
| 162 | | Set.null xs = Set.empty | 166 | | Set.null xs = Set.empty |
| 163 | | otherwise = xs' `Set.union` build xs' (xs' `Set.union` known) | 167 | | otherwise = xs' `Set.union` build xs' (xs' `Set.union` known) |
| @@ -235,7 +239,10 @@ type Variable = String | |||
| 235 | -- | 239 | -- |
| 236 | -- Einfache Implementierung der Auswertung : | 240 | -- Einfache Implementierung der Auswertung : |
| 237 | eval :: Term -> Term | 241 | eval :: Term -> Term |
| 238 | eval = undefined -- !!! TODO !!! | 242 | eval (App f x) = case eval f of |
| 243 | (Abs v t) -> eval $ subst (v, x) t | ||
| 244 | t -> eval $ t | ||
| 245 | eval x = x | ||
| 239 | 246 | ||
| 240 | 247 | ||
| 241 | {- Beispiele, ohne Auswertung unter einem Lambda, Konstanten cK, c1, usw. sind weiter unten, im Anhang der Datei definiert. | 248 | {- Beispiele, ohne Auswertung unter einem Lambda, Konstanten cK, c1, usw. sind weiter unten, im Anhang der Datei definiert. |
| @@ -282,7 +289,13 @@ evalS0 = evalS Map.empty | |||
| 282 | -- Ihre Aufgabe ist es also, evalS zu implementieren: | 289 | -- Ihre Aufgabe ist es also, evalS zu implementieren: |
| 283 | 290 | ||
| 284 | evalS :: Memory -> Term -> (Memory, Term) | 291 | evalS :: Memory -> Term -> (Memory, Term) |
| 285 | evalS = undefined -- !!! TODO !!! | 292 | evalS m x@(Var v) = (,) m $ fromMaybe x $ Map.lookup v m |
| 293 | evalS m (App f x) = case f' of | ||
| 294 | (Abs v t) -> undefined | ||
| 295 | t -> evalS m' t | ||
| 296 | where | ||
| 297 | (m', f') <- evalS m f | ||
| 298 | evalS m x = (m, x) | ||
| 286 | 299 | ||
| 287 | -- Dabei verfolgen wir folgende Auswertestrategie: | 300 | -- Dabei verfolgen wir folgende Auswertestrategie: |
| 288 | -- | 301 | -- |
