help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Nested Functions alternative?


From: Jason Carver
Subject: Re: Nested Functions alternative?
Date: Mon, 22 Jun 2009 13:32:40 -0400

Ok, great, it's the 'persistent' keyword that I was missing.  Thanks!

BTW, I got the Matlab nested function syntax from the zip file here: http://www.mathworks.com/matlabcentral/fileexchange/18223
My code was consistent with that zip I think, so I'm not sure why it wouldn't work.

Also, the sneakemail servers mangle the headers to make it look like it was only sent to you, even though I cc'd address@hidden .  Anyway I messed up the last time and posted my "real" email for spammers everwhere, so for clarity I stopped using sneakemail on this reply.

Thanks for all your help Carlo,
Carver

Slique.com - builds group memory by putting all your group's email, files and documents in one place
I'm trying this out: http://five.sentenc.es/


On Mon, Jun 22, 2009 at 11:58 AM, Carlo de Falco carlo.defalco-at-gmail.com |public mailing list| <address@hidden> wrote:

On 22 Jun 2009, at 16:52, address@hidden wrote:

Thanks Carlo,

I believe that solution won't work in general for a "stateful generator" pattern, right?  eg~

==anonymous function:

function a = adder(a,b)
 a = a+b;
end

gen = @(b) adder(0,b) #anonymous function does not maintain state between calls

gen(1) -> 1
gen(1) -> 1
gen(1) -> 1

==nested function

function f = adder(a)
 #adder returns a stateful adding function that keeps track of the total sum
 function a = addon(b)
 #addon adds b into the summation with each call, returning the cumulative sum over all calls
 a = a+b; #assign to state variable a
 end
 f = @addon
end

gen = adder(0) #nested function maintains state between calls

gen(1) -> 1
gen(1) -> 2
gen(1) -> 3

==

Is it possible to accomplish the same effect as the nested function in Octave?  Despite the maintainers' (reasonable) warnings about code clarity, there are some situations that would really benefit from this pattern.  (Apologies if my nested function example has any typos, I don't have access to Matlab to test it)

Thanks,
Carver

Again maybe I'm missing the big picture as I don't understand why you would need nested functions to accomplish what you propose, but I think you can doit as follows:

>>function f = adder (a, b)
 persistent f = b;
 f += a;
endfunction
>> gen = @(a) adder(a, 0);
>> gen (1)
ans =  1
>> gen (1)
ans =  2
>> gen (1)
ans =  3

HTH,
c.

P.S. please keep the list in CC when answering as someone else might
be intersted in the topic


reply via email to

[Prev in Thread] Current Thread [Next in Thread]