unknown
lisp
9 days ago
2.2 kB
1
Indexable
Never
; Task: A function that takes a grandchild and a result set and updates the guard set accordingly.

; Components

;;;;;;;;; Component 1 ;;;;;;;;;;;;

; find-object: accepts a list and and an instance, iterates through it, and returns True if object is available, else False
; (: find-object (-> List TreeNode Bool))

(= (find-object \$list \$instance)
(
case \$list (
(Nil False)
((Cons \$x \$xs) (
if (== \$x \$instance) True (find-object \$xs \$instance)
))
(\$_ ERROR)
)
)
)

! (find-object (Cons 1 (Cons 2 (Cons 3 (Cons 4 Nil)))) 7)
! (find-object (Cons 1 (Cons 2 (Cons 3 (Cons 4 Nil)))) 4)

;;;;;; Component 2: Set Difference Calculator Returns \$list1 - \$list2 (A-B in mathematical terms) ;;;;;;;;;;;;;;;

; LOGIC: Iterate over objects of \$list1, if they don't exist in \$list2 add them to our list

; (:set-difference (-> List List List))
(= (set-difference \$list1 \$list2)
(
case \$list1 (
(Nil Nil) ; Base Case: Reaches the end of the list

((Cons \$x \$xs) ( ; Destructure the list, one value to \$x the rest of the list to \$xs
if (find-object \$list2 \$x) ; if condition
(set-difference \$xs \$list2) ; pass if object found in @list2
(Cons \$x (set-difference \$xs \$list2)) ; add to our result and continue if not found in \$list2
))
)
)
)

! (set-difference (Cons 1 (Cons 2 (Cons 7 (Cons 4 Nil))))  (Cons 1 (Cons 2 (Cons 3 (Cons 5 Nil)))))

(TreeNode \$nodeValue \$left \$right \$guardSet \$children)

; LOGIC: destructure grandChild and get the \$guardSet, then calculate its set difference with result set

; ( : compute-grandchild-guardset (-> TreeNode List))
( = (compute-grandchild-guardset \$grandChild \$resultset)
(
case \$grandChild (
((TreeNode \$nodeValue \$left \$right \$guardSet \$children) (TreeNode \$nodeValue \$left \$right (set-difference \$guardSet \$resultset) \$children))
(\$_ ERROR)
)
)
)

; ! (compute-grandchild-guardset )