projects
/
matthijs
/
master-project
/
report.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update normal form example.
[matthijs/master-project/report.git]
/
Chapters
/
Normalization.tex
diff --git
a/Chapters/Normalization.tex
b/Chapters/Normalization.tex
index a8194decdf2826b8c9677989754dcd4e3c78fa25..2acd1c8a14296539507ef8e153c19ff79a9498f5 100644
(file)
--- a/
Chapters/Normalization.tex
+++ b/
Chapters/Normalization.tex
@@
-62,27
+62,35
@@
An example of a program in canonical form would be:
\startlambda
-- All arguments are an inital lambda
\startlambda
-- All arguments are an inital lambda
- λ
x.λc.λd
.
- -- There
is one let expression at the
top level
+ λ
a.λd.λsp
.
+ -- There
are nested let expressions at
top level
let
let
+ -- Unpack the state by coercion
+ s = sp :: (Word, Word)
+ -- Extract both registers from the state
+ r1 = case s of (fst, snd) -> fst
+ r2 = case s of (fst, snd) -> snd
-- Calling some other user-defined function.
-- Calling some other user-defined function.
- s = foo x
- -- Extracting result values from a tuple
- a = case s of (a, b) -> a
- b = case s of (a, b) -> b
- -- Some builtin expressions
- rh = add c d
- rhh = sub d c
+ d' = foo d
-- Conditional connections
-- Conditional connections
- rl = case b of
- High -> rhh
+ out = case a of
+ High -> r1
+ Low -> r2
+ r1' = case a of
+ High -> d
+ Low -> r1
+ r2' = case a of
+ High -> r2
Low -> d
Low -> d
- r = case a of
- High -> rh
- Low -> rl
+ -- Packing a tuple
+ s' = (,) r1' r2'
+ -- Packing the state by coercion
+ sp' = s' :: State (Word, Word)
+ -- Pack our return value
+ res = (,) sp' out
in
-- The actual result
in
-- The actual result
- r
+ r
es
\stoplambda
When looking at such a program from a hardware perspective, the top level
\stoplambda
When looking at such a program from a hardware perspective, the top level