Skip to content

Commit 944ca0d

Browse files
thmathma
authored andcommitted
B', C' and S' work for graphreduction and HHI
1 parent f9be3c6 commit 944ca0d

File tree

3 files changed

+38
-4
lines changed

3 files changed

+38
-4
lines changed

app/Main.hs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,8 @@ graphReductionDemo ioexpr = do
7878
hhiReductionDemo :: IO Expr -> IO ()
7979
hhiReductionDemo ioexpr = do
8080
expr <- ioexpr
81-
--let cexpr = translate expr
82-
--putStrLn "compiled to CExpr"
83-
--print cexpr
81+
putStrLn "compiled to CExpr"
82+
print expr
8483
let actual = transLink primitives expr
8584
putStrLn "after graph reduction:"
8685
print actual

src/GraphReduction.hs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,38 @@ reduce C (p1 : p2 : p3 : _) = do
141141
(_ :@: zP) <- readSTRef p3
142142
node1 <- newSTRef $ xP :@: zP
143143
writeSTRef p3 (node1 :@: yP)
144+
145+
-- B' P Q R S = P Q (R S)
146+
reduce B' (p : q : r : s : _) = do
147+
(_ :@: pP) <- readSTRef p
148+
(_ :@: qP) <- readSTRef q
149+
(_ :@: rP) <- readSTRef r
150+
(_ :@: sP) <- readSTRef s
151+
node1 <- newSTRef $ pP :@: qP
152+
node2 <- newSTRef $ rP :@: sP
153+
writeSTRef s (node1 :@: node2)
154+
155+
-- C' P Q R S = P (Q S) R
156+
reduce C' (p : q : r : s : _) = do
157+
(_ :@: pP) <- readSTRef p
158+
(_ :@: qP) <- readSTRef q
159+
(_ :@: rP) <- readSTRef r
160+
(_ :@: sP) <- readSTRef s
161+
node1 <- newSTRef $ qP :@: sP
162+
node2 <- newSTRef $ pP :@: node1
163+
writeSTRef s (node2 :@: rP)
164+
165+
-- S' P Q R S = P (Q S) (R S)
166+
reduce S' (p : q : r : s : _) = do
167+
(_ :@: pP) <- readSTRef p
168+
(_ :@: qP) <- readSTRef q
169+
(_ :@: rP) <- readSTRef r
170+
(_ :@: sP) <- readSTRef s
171+
node1 <- newSTRef $ qP :@: sP
172+
node2 <- newSTRef $ pP :@: node1
173+
node3 <- newSTRef $ rP :@: sP
174+
writeSTRef s (node2 :@: node3)
175+
144176
reduce Y (p1 : _) = do
145177
(_yP :@: fP) <- readSTRef p1
146178
writeSTRef p1 (fP :@: p1)

src/LambdaToSKI.hs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,10 @@ opt (Var "i" :@ n@(Int _n)) = n
7878
opt ((Var "s" :@ (Var "k" :@ e1)) :@ (Var "k" :@ e2)) = Var "k" :@ (e1 :@ e2)
7979
opt ((Var "s" :@ e1) :@ (Var "k" :@ e2)) = (Var "c" :@ e1) :@ e2
8080
opt ((Var "s" :@ (Var "k" :@ e1)) :@ e2) = (Var "b" :@ e1) :@ e2
81-
opt ((Var "s" :@ ((Var "b" :@ Var "p") :@ Var "q")) :@ Var "r") = ((Var "s1" :@ Var "p") :@ Var "q") :@ Var "r"
81+
opt ((Var "s" :@ ((Var "b" :@ p) :@ q)) :@ r) = ((Var "s'" :@ p) :@ q) :@ r -- Diller, p.98
82+
opt ((Var "b" :@ (p :@ q) :@ r)) = ((Var "b'" :@ p) :@ q) :@ r
83+
opt ((Var "c" :@ ((Var "b" :@ p) :@ q)) :@ r) = ((Var "c'" :@ p) :@ q) :@ r
84+
8285
opt (x :@ y) = opt x :@ opt y
8386
opt x = x
8487

0 commit comments

Comments
 (0)