home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 2
/
DATAFILE_PDCD2.iso
/
utilities
/
_gofer
/
!Gofer
/
archives
/
Demos
/
Modular
/
Readme
< prev
next >
Wrap
Text File
|
1993-02-12
|
3KB
|
74 lines
------------------------------------------------------------------------------
The files in this directory are based on the programs described in:
A Modular fully-lazy lambda lifter in Haskell
Simon L. Peyton Jones and David Lester
Software -- Practice and Experience
Vol 21(5), pp.479-506
MAY 1991
These files include:
Readme -- this file.
Utility -- implementation of various utility functions and
data types including sets, bags and name supplies.
The paper referred to above includes type signatures
for the operations defined in this file but does not
actually give definitions. I trust that my own
implementations of these functions will be satisfactory!
LambdaLift -- simple lambda lifter. Contains code from the first
half of the above paper.
Laziness -- transformations for fully-lazy lambda lifting. Contains
the remaining code from the above paper.
Demo -- demonstration of lamda lifting (normal and fully-lazy
variants). This hastily-written file contains definitions
for a parser and input parser for the expressions used
in the preceeding two files. This file can only be loaded
if the Parse file from MiniProlog has already been loaded
into Gofer. As it stands, this code uses non-standard
features of Gofer and will not (i.e. should not!) be
accepted by a Haskell compiler.
The modular fully-lazy lambda lifter and demonstration files can be loaded
into Gofer with the command:
gofer Utility LambdaLift Laziness ../Prolog/Parse Demo
(or, using the project file supplied, gofer + mlamlift.gp)
The kind of results that can be obtained are illustrated by:
? show example1
let f = (\x.let g = (\y.(Plus (Times x x) y)) in (Plus (g 3) (g 4))) in (f 6)
? ll example1
1) $main = let f = SC1 in (f 6)
2) SC1 x = let g = (SC0 x) in (Plus (g 3) (g 4))
3) SC0 x y = (Plus (Times x x) y)
? fll example1
1) $main = let f0 = SC1 in (f0 6)
2) SC1 x1 = let v4 = (Plus (Times x1 x1)) in
let g2 = (SC0 v4) in (Plus (g2 3) (g2 4))
3) SC0 v4 y3 = (v4 y3)
? show example2
let f = (\x.letrec g = (\y.(Cons (Times x x) (g y))) in (g 3)) in (f 6)
? ll example2
1) $main = let f = SC1 in (f 6)
2) SC1 x = letrec g = (SC0 g x) in (g 3)
3) SC0 g x y = (Cons (Times x x) (g y))
? fll example2
1) $main = let f0 = SC1 in (f0 6)
2) SC1 x1 = let v4 = (Cons (Times x1 x1)) in
letrec g2 = (SC0 g2 v4) in (g2 3)
3) SC0 g2 v4 y3 = (v4 (g2 y3))
------------------------------------------------------------------------------