Skip to content

Commit b41112a

Browse files
thmathma
authored andcommitted
adopt benchmark for fairer comparison
1 parent 944ca0d commit b41112a

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

benchmark/ReductionBenchmarks.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
module ReductionBenchmarks where
22

33
import Criterion.Main ( defaultMain, bench, nf )
4-
import Parser ( parseEnvironment, Expr(Int) )
4+
import Parser ( parseEnvironment, Expr(Int, (:@)) )
55
import LambdaToSKI ( abstractToSKI, compile )
66
import GraphReduction ( allocate, normalForm, toString, Graph )
77
import Data.Maybe (fromJust)
88
import Data.STRef ( STRef )
99
import Control.Monad.ST ( ST, runST )
10-
import HhiReducer ( primitives, transLink)
10+
import HhiReducer ( primitives, transLink, CExpr(CInt, CApp) )
1111
import Control.Monad.Fix ( fix )
1212

1313
type SourceCode = String
@@ -43,10 +43,10 @@ reduceGraph graph = do
4343
normalForm gP
4444

4545
reducerTest :: Expr -> String
46-
reducerTest expr =
47-
let tExp = transLink primitives expr
48-
in show tExp
49-
46+
reducerTest (expr :@ (Int x)) =
47+
let fun = transLink primitives expr
48+
in show (CApp fun (CInt x))
49+
reducerTest expr = error "invalid input expression " ++ show expr
5050

5151
benchmarks :: IO ()
5252
benchmarks = do

src/LambdaToSKI.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,22 +66,22 @@ fv vs (Lam s f) = fv (s : vs) f
6666
fv vs _ = vs
6767

6868
isComb :: Expr -> Bool
69-
isComb e = null $ fv [] e \\ ["s", "k", "i", "b", "c", "y"]
69+
isComb e = null $ fv [] e \\ ["s", "k", "i", "b", "c", "y", "s'", "b'", "c'"]
7070

7171
noLamEq :: Expr -> Expr -> Bool
7272
noLamEq (Var x) (Var y) = x == y
7373
noLamEq (a :@ b) (c :@ d) = a `noLamEq` c && b `noLamEq` d
7474
noLamEq _ _ = False
7575

76+
-- | optimizations according to Antoni Diller, Compiling Functional Languages, chapter 7
7677
opt :: Expr -> Expr
7778
opt (Var "i" :@ n@(Int _n)) = n
7879
opt ((Var "s" :@ (Var "k" :@ e1)) :@ (Var "k" :@ e2)) = Var "k" :@ (e1 :@ e2)
7980
opt ((Var "s" :@ e1) :@ (Var "k" :@ e2)) = (Var "c" :@ e1) :@ e2
8081
opt ((Var "s" :@ (Var "k" :@ e1)) :@ e2) = (Var "b" :@ e1) :@ e2
8182
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-
83+
opt ((Var "b" :@ (p :@ q) :@ r)) = ((Var "b'" :@ p) :@ q) :@ r -- Diller, p.98
84+
opt ((Var "c" :@ ((Var "b" :@ p) :@ q)) :@ r) = ((Var "c'" :@ p) :@ q) :@ r -- Diller, p.98
8585
opt (x :@ y) = opt x :@ opt y
8686
opt x = x
8787

0 commit comments

Comments
 (0)