that was it thanks :)
here is updated class to work with gerund parameters too.
coclass'coroutine'
NB. Coroutines are functions with bonded state, that when called return a value
NB. and update their bonded state, ready to be called a next time. Other
languages implement this similarly to putting the function into debug pause
state.
NB.This is a much simpler and more versatile approach: just save the state
somewhere easy to find.
NB.CREATE:
NB. savedobject =. verb Coroutine [noun Initialdata] or,
NB. savedobject =. resultverb`transfromverb Coroutine [noun Initialdata]
NB. first version is equivalen to verb`}. Coroutine [noun Initialdata]
NB.USE:
NB. resume__savedobject ''
NB. after each call, the state is beheaded, or transform function passed as 2nd
gerund is used.
Note 'Example'
a1=: {. Coroutine 1 2 3 4 5
resume__a1 ''
1
(resume__a1 + ]) 10 20
12 22
(resume__a1 + ])("0) 10 20
13 24
resume__a1 ''
5
(i.0 0) -: resume__a1 ''
1
)
function=: i.0
transform=: }.
create=: 3 : 0
STATE=: y
)
destroy=: codestroy
resume=: 3 : 0
if. 0=#STATE do. return. end.
(STATE=: transform STATE) ] function STATE
)
NB. possible alternative: call y function STATE to use param to resume.
lazy=: 3 : 0
NB. lazy data structures
NB. not meant to be mixed and matched with resume_coroutine_ but it is the same
code.
NB. this version is meant to be slighly faster and simpler.
NB. if verb, then new STATE=: f STATE
if. 0=#STATE do. return. end.
] STATE=: function STATE
)
cocurrent 'base'
Coroutine=: 1 : 0
lastobj =: y conew 'coroutine'
function__lastobj =: u
if. 4!:0 <'function__lastobj' do. else. NB. if gerund... if not, just behead
list
'`function__lastobj transform__lastobj' =: function__lastobj
end.
lastobj
)
----- Original Message ----
From: Henry Rich <[EMAIL PROTECTED]>
To: Programming forum <[email protected]>
Sent: Friday, October 27, 2006 11:08:58 PM
Subject: RE: [Jprogramming] Neat coroutine implementation
I still don't know what you are looking for. If you could
give a more detailed spec it would be nice.
'`p m' =: +`-
(note the leading `) assigns verbs (more precisely, it assigns
from the ARs of the right argument, so it can assign all types).
Henry Rich
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Pascal Jasmin
> Sent: Friday, October 27, 2006 10:45 PM
> To: Programming forum
> Subject: Re: [Jprogramming] Neat coroutine implementation
>
> I don't think it will work. I'd like to make a parameter to
> an adverb be either a verb, or a gerund of verbs... and if it
> is a gerund overide default class verbs with the extra parameters.
>
> this just gives literals:
> 'p m' =: +`-
>
> this works if you know you want monad or dyad
> p=: 4 : ('x' , p , 'y')
>
> ----- Original Message ----
> From: Henry Rich <[EMAIL PROTECTED]>
> To: Programming forum <[email protected]>
> Sent: Friday, October 27, 2006 10:14:24 PM
> Subject: RE: [Jprogramming] Neat coroutine implementation
>
> is
> > there a way to convert a gerund into verbs instead of strings?
>
> Don't know just what you need, but have you looked at
>
> gerund `: 6
>
> ?
>
> Henry Rich
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
>
>
>
>
> ----------------------------------------------------------------------
> For information about J forums see
> http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm