_DKsissor_ zei:
lukke die examenoefeningen bij u of zijt ge nog bezig met de oefenzittingen?
Kheb vaak echt geen gedacht hoe aan die oefeningen te beginnen , kdenk dak gewoon hier op kot met iemand wa van die vrage ga make zodat ik hopelijk sneller oplossingen zie
Ben aan oefenzitting 3 van haskell bezig. Dit was de voormalige oefenzitting 5, maar sinds vorig jaar ofzo, is oefenzitting 3 + 5 = oefenzitting 3 geworden. Daarom da'k die toen in de les ook voor de ballen afkreeg.
Anyway; voorlaatste oefening daar, ik heb het concept, doch het werkt niet helemaal (meer specifiek de dereference operatie). Ik neem er de oplossing van toledo dan amar bij. Daar wordt gebruik gemaakt van de
@-operator. Aanvankelijk niet van gehoord, en enig zoekwerk nodig gehad voor ik daar iets over vond.
Bon, zie mijn fout niet, probeer eens gewoon hun oplossing te compilen en die werkt niet.

Als ik hun oplossing nader bekijk, zie ik daar zo al 3 fouten staan. :naughty:
Na enig verbeteren kom ik ook op wat ik zelf al had: namelijk
Code:
*** Expression : dereference2 (lookup var heap) r var
*** Term : lookup var heap
*** Type : Maybe PrologData
*** Does not match : PrologData
Wat te verklaren valt door die lookup die een Maybe type teruggeeft in plaats van gewoon wat je zoekt.
Hierna heb ik dan maar zelf een functie removeMaybe geschreven, en dan werkt het wel allemaal

. Daarom publiceer ik hieronder exclusief de oplossing voor oefening 4 van oefenzitting 3.
Code:
--------------------------------------------------------------------------------
-- Prolog Data
--------------------------------------------------------------------------------
data PrologData = Term String [PrologData] | Var Int deriving Show
data PrologEnv = Env Int [(Int,PrologData)]
emptyPE :: PrologEnv
emptyPE = Env 0 []
newvar :: PrologEnv -> PrologEnv
newvar (Env currentVar heap) = let newVar = currentVar + 1
in Env newVar ((newVar,Var newVar):heap)
removeMaybe :: Maybe a -> a
removeMaybe (Just a) = a
dereference :: PrologEnv -> Int -> PrologData
dereference r@(Env _ heap) var =
dereference2 (removeMaybe (lookup var heap)) r var
dereference2 v@(Var var) r n
| var == n = v
| otherwise = dereference r n
dereference2 v@(Term _ _) _ _= v
bind :: PrologEnv -> Int -> PrologData -> PrologEnv
bind (Env cv heap) var val = Env cv ((var,val):heap)
Dat irriteert mij nog het meeste aan dit vak. De assistenten kunnen er zelf geen zak van, en willen u ook voor geen zak voorthelpen. Tijdens de oefenzittingen heb ik meer dan eens mogen horen: "Ja, ik weet het niet." Wtf, doede daar dan als assistent?