First class function is function that are treated as variable. C# we have delegates.
Free variables, are ones that are accessible to function which are not either passed as argument or defined locally.
Lexical environment means scope.
We call it closure because, first class function closes the variable it refers. In the example below, though myVar goes out of scope after first inc(), it is closed by the first class function(inc). It would print 7 & 9.
static
void
Main(
string
[] args)
{
var inc = GetAFunc();
Console.WriteLine(inc(5));
Console.WriteLine(inc(6));
}
public
static
Func<
int
,
int
> GetAFunc()
{
var myVar = 1;
Func<
int
,
int
> inc =
delegate
(
int
var1)
{
myVar = myVar + 1;
return
var1 + myVar;
};
return
inc;
}
No comments:
Post a Comment