From 922266f917bd59d32757bf51b866e0d8c8f5228e Mon Sep 17 00:00:00 2001 From: Manuel Thalmann Date: Mon, 17 Jun 2024 00:36:43 +0200 Subject: [PATCH] Implement `freeVars` --- Exercises/exercise-7/Lambda.hs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Exercises/exercise-7/Lambda.hs b/Exercises/exercise-7/Lambda.hs index 0e00a46..7bd913d 100644 --- a/Exercises/exercise-7/Lambda.hs +++ b/Exercises/exercise-7/Lambda.hs @@ -1,4 +1,4 @@ -import Data.Set (Set) +import Data.Set (Set, empty, delete, union, singleton) -------------------- -- Slides -------------------- @@ -21,6 +21,17 @@ pretty x = case x of -- >>> pretty (Abs "x" $ Abs "y" $ Inv (Inv Add (Var "x")) (Var "y")) -- "Lx.Ly.((Add x) y)" +freeVars :: Term -> Set String +freeVars x = case x of + (Abs param term) -> delete param (freeVars term) + (Inv func param) -> freeVars func `union` freeVars param + (Var name) -> singleton name + _ -> empty + +-- example +-- >>> freeVars (Inv (Var "y") $ Abs "x" Add) +-- fromList ["y"] + -------------------- -- Exercise 1 --------------------