This commit is contained in:
2025-11-17 17:02:18 +01:00
parent 9bdbe830d2
commit 2e6172c115
3 changed files with 53 additions and 7 deletions

25
3/Assignment.hs Normal file
View File

@ -0,0 +1,25 @@
{-# Language LambdaCase #-}
module Assignment where
import Chi
subst :: Variable -> Exp -> Exp -> Exp
subst var e = \case
Apply e1 e2 -> Apply (subst var e e1) (subst var e e2)
Lambda x e' -> Lambda x $ if var /= x then (subst var e e') else e'
Var x -> if var == x then e else Var x
Const c es -> Const c $ map (subst var e) es
Rec x e' -> Rec x $ if var /= x then (subst var e e') else e'
Case e' branches -> Case (subst var e e') $ map substBr branches
where
substBr :: Br -> Br
substBr (Branch c vs e') = Branch c vs $ if var `notElem` vs then (subst var e e') else e'
eval' :: Exp -> Reader (Map Variable Exp) Exp
eval' = undefined
eval :: Exp -> Exp
eval = undefined
main :: IO ()
main = getLine >>= print . eval . parse