free variables in lambda terms ?
Marko Schuetz
MarkoSchuetz@web.de
Fri, 26 Apr 2002 11:25:27 +0200
Konst,
From: "Konst Sushenko" <konsu@microsoft.com>
Subject: free variables in lambda terms ?
Date: Thu, 25 Apr 2002 20:07:01 -0700
> hi, would someone please help me with the question below? i tried asking
> on comp.lang.functional list but noone responded...
>
>
> "konsu" <konsu@hotmail.com> wrote in message
> news:<ATOx8.42722$t65.9246@nwrddc02.gnilink.net>...
> > hello,
> >
> > as an exercise, i am trying to implement a pure lambda calculus
> interpreter.
> > i am using normal order reduction with textual substitution of terms.
> >
> > a program that my interpreter accepts is a list of name/term
> declarations:
> >
> > <name 1> = <lambda term 1>
> > ...
> > <name N> = < lambda term N>
> >
> > each declaration defines a global name and binds a term to it, and the
> > interpreter starts evaluation with the term named 'main'.
> >
> >
> > i implemented all the functions necessary to evaluate a closed lambda
> term,
> > and now i got to the point where i need to handle free variables in a
> term.
> > my assumption is that free variables denote terms declared as above.
> >
> > my question is when should i expand free variables? i also would
> appreciate
> > any references to literature, etc. where this is discussed.
> >
> > so far i believe the way to do it is to reduce a term to its normal
> form
> > without handling free variables, and then, if it has free variables,
> look up
> > their definitions in the environment and replace them with their
> bodies,
> > evaluate the resulting term to its normal form again, and keep
> repeating
> > this process until no free variables are found.
> >
> > is this the right way to do it? or should i check for free variables
> when i
> > compute the WHNF, etc.? any advice from the experts?
You want to substitute the definitions of your names when
you apply one to an expression.
name = \x -> body
main = name (4+5)
main
-> name (4+5)
-> (\x -> body) (4+5)
-> body[(4+5)/x]
@Book{ peyton-jones87,
author = {Peyton Jones, Simon L.},
title = {The Implementation of Functional Programming Languages},
publisher = {Prentice-Hall International},
address = {London},
year = 1987
}
Also read about name capture.
Marko