Thanks, that looks like the ticket! I will try this out.
On Tuesday, February 3, 2015 at 7:10:40 PM UTC-8, Erik Schnetter wrote: > > On Feb 3, 2015, at 20:30 , Erik Schnetter <[email protected] <javascript:>> > wrote: > > > >> On Feb 3, 2015, at 20:22 , Peter Simon <[email protected] > <javascript:>> wrote: > >> > >> Thanks, I will take a look at functors when I upgrade to 0.4. > > I didn't see this before. Here's another approach, without objects; it's > functional and very Lispy. Probably also Julialy. > > Let's assume that there's an algorithm, and you have to pass a function > f(x) to the algorithm. This function is expensive to evaluate, so you want > to keep state around. In my field, this could be a residual evaluator that > I need to pass to a solver > > First, define a function res(x, state) that takes the state as explicit > argument. Here's an example: > > function res(x, state) > y = state[1] > state[1] = x > return y > end > > Then define your function f(x), together with the initial state: > > function myapplication > mystate = [1] # just a list > f(x) = res(x, mystate) # yes, f(x) is a local function > ... solver(f) ... > end > > Whenever f(x) is called, it remembers the state variable that you created. > Since f(x) is a local function, it will go out of scope at some point. You > can also create another function g(x) from res with a different state. > > Note that the state variable needs to be a reference type. I used a list > here; you can also use an array, or a type that you declare yourself. > However, it cannot be an immutable type. > > -erik > > -- > Erik Schnetter <[email protected] <javascript:>> > http://www.perimeterinstitute.ca/personal/eschnetter/ > > My email is as private as my paper mail. I therefore support encrypting > and signing email messages. Get my PGP key from https://sks-keyservers.net. > > >
