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 /ws2015/FFP/blaetter/04 | |
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
Diffstat (limited to 'ws2015/FFP/blaetter/04')
-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 | -- |