summaryrefslogtreecommitdiff
path: root/ws2015
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2015-11-13 19:01:12 +0100
committerGregor Kleen <gkleen@yggdrasil.li>2015-11-13 19:01:12 +0100
commitd1297aee25605ebc35124023c2523ce90abbc787 (patch)
tree00db64a44a7128e8133079de6e7bb9c50672315e /ws2015
parentc963b8b1dcd9c2d453e37b28e9fef4f9790ae814 (diff)
downloaduni-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')
-rw-r--r--ws2015/FFP/blaetter/04/FFP_U04_Lazy.hs19
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
17import Data.Map (Map) 17import Data.Map (Map)
18import qualified Data.Set as Set 18import qualified Data.Set as Set
19import Data.Set (Set) 19import Data.Set (Set)
20import qualified Data.List as List 20import qualified Data.List as List ((\\))
21
22import 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
158transClS :: (Ord a) => (a -> Set a) -> Set a -> Set a 160transClS :: (Ord a) => (a -> Set a) -> Set a -> Set a
159transClS rel xs = build xs Set.empty 161transClS 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 :
237eval :: Term -> Term 241eval :: Term -> Term
238eval = undefined -- !!! TODO !!! 242eval (App f x) = case eval f of
243 (Abs v t) -> eval $ subst (v, x) t
244 t -> eval $ t
245eval 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
284evalS :: Memory -> Term -> (Memory, Term) 291evalS :: Memory -> Term -> (Memory, Term)
285evalS = undefined -- !!! TODO !!! 292evalS m x@(Var v) = (,) m $ fromMaybe x $ Map.lookup v m
293evalS 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
298evalS m x = (m, x)
286 299
287-- Dabei verfolgen wir folgende Auswertestrategie: 300-- Dabei verfolgen wir folgende Auswertestrategie:
288-- 301--