Title here
Summary here
(* Wolfram Language supports anonymous functions,
which can form closures. Anonymous functions are
useful when you want to define a function inline
without having to name it. *)
(* This function intSeq returns another function, which
we define anonymously in the body of intSeq. The
returned function closes over the variable i to
form a closure. *)
intSeq[] := Module[{i = 0},
Function[i++; i]
]
(* We call intSeq, assigning the result (a function)
to nextInt. This function value captures its
own i value, which will be updated each time
we call nextInt. *)
nextInt = intSeq[]
(* See the effect of the closure by calling nextInt
a few times. *)
Print[nextInt[]]
Print[nextInt[]]
Print[nextInt[]]
(* To confirm that the state is unique to that
particular function, create and test a new one. *)
newInts = intSeq[]
Print[newInts[]]
In Wolfram Language, we use Module
to create a local variable i
that persists between function calls, simulating the closure behavior. The Function
construct creates an anonymous function that increments and returns the value of i
.
To run this code in Wolfram Language:
(* Evaluate the code in a Wolfram Language notebook or
use the Wolfram Engine command-line interface *)
1
2
3
1
The last feature of functions we’ll look at for now is recursion, which is also supported in Wolfram Language.