Declaratieve Talen/Oplossing haskell paginering
Naar navigatie springen
Naar zoeken springen
lru::Int->Int->[Int]->[(Int,Int,Int,Int)] lru m n p=(lru2 m n p 1 [] []) lru2::Int->Int->[Int]->Int->[Int]->[Int]->[(Int,Int,Int,Int)] lru2 _ _ [] _ _ _=[] lru2 m n (p:rest) tijd werk times= (if ((length werk)<m && notElem p werk) then lru2 m n rest (tijd+1) (werk++[p]) (times++[tijd]) else (if elem p werk then lru2 m n rest (tijd+1) werk (change_time werk p times tijd) else [(tijd,(index (minim times) times),werk!!(index (minim times) times),p)]++lru2 m n rest (tijd+1) (change_werk werk p (index (minim times) times)) (change_time (change_werk werk p (index (minim times) times)) p times tijd))) change_time::[Int]->Int->[Int]->Int->[Int] change_time werk p times tijd=take (index p werk) times++[tijd]++drop ((index p werk)+1) times change_werk::[Int]->Int->Int->[Int] change_werk werk p ind=take ind werk++[p]++drop (ind+1) werk index::Int->[Int]->Int index _ []=error "not in list" index p (el:rest)=(if p==el then 0 else (1+index p rest)) minim :: (Ord a) => [a] -> a minim [] = error "empty list" minim xs = foldl1 min xs