scoreToLetter :: Integer -> Char scoreToLetter n | n > 90 = 'A' | n > 80 = 'B' | n > 70 = 'C' | otherwise = 'D' len :: [a] -> Integer len [] = 0 len (_:xs) = 1 + len xs duplicate :: [a] -> [a] duplicate [] = [] duplicate (x:xs) = [x, x] ++ duplicate xs firstn 0 _ = [] firstn n [] = [] firstn n (x:xs) = x : firstn (n-1) xs ones :: [Integer] ones = 1 : ones zipOp :: (a -> b -> c) -> [a] -> [b] -> [c] zipOp f (a:as) (b:bs) = (f a b) : (zipOp f as bs) zipOp f [] _ = [] zipOp f _ [] = [] fibs :: [Integer] fibs = 0:1: zipWith (+) (tail fibs) fibs -- Interpreter of WAE type Identifier = String type Value = Integer ------- type Env = [(Identifier,Value)] eempty :: Env eempty = [] eextend :: Identifier -> Value -> Env -> Env eextend x v env = (x,v) : env elookup :: Identifier -> Env -> Value elookup x [] = error (x ++ " esta libre") elookup x ((y,v):ys) | x == y = v | otherwise = elookup x ys -------- data Expr = Num Integer | Add Expr Expr | Sub Expr Expr | Id Identifier | With Identifier Expr Expr eval :: Expr -> Env -> Integer eval (Num n) env = n eval (Add e1 e2) env = eval e1 env + eval e2 env eval (Sub e1 e2) env = eval e1 env - eval e2 env eval (Id x) env = elookup x env eval (With x e b) env = eval b (eextend x (eval e env) env) myex :: Expr myex = (With "x" (Num 5) (Add (Id "x") (Num 8))) main :: IO () main = return ()