"{ Package: 'stx:libbasic2' }"
"{ NameSpace: Smalltalk }"
IteratorStream subclass:#RecursiveSeriesStream
instanceVariableNames:'lastValue'
classVariableNames:''
poolDictionaries:''
category:'Streams'
!
!RecursiveSeriesStream class methodsFor:'documentation'!
documentation
"
documentation to be added.
class:
<a short class summary here, describing what instances represent>
responsibilities:
<describing what my main role is>
collaborators:
<describing with whom and how I talk to>
API:
<public api and main messages>
example:
<a one-line examples on how to use - can also be in a separate example method>
implementation:
<implementation points>
[author:]
cg
[instance variables:]
[class variables:]
[see also:]
"
!
example
"
|s|
s := RecursiveSeriesStream on:[:n | n/2] startValue:1.
s next:10.
s next:10.
s := RecursiveSeriesStream on:[:n | n even ifTrue:[n/2] ifFalse:[n*3+1]] startValue:10.
s next:10.
s next:10.
"
!
example2
"
|s|
1 to:100 collect:[:n0 |
s := RecursiveSeriesStream on:[:n | n even ifTrue:[n/2] ifFalse:[n*3+1]] startValue:n0.
s next:10.
]
"
! !
!RecursiveSeriesStream class methodsFor:'instance creation'!
on:aBlock startValue:startValue
^ self basicNew initialize iterator:aBlock startValue:startValue
! !
!RecursiveSeriesStream methodsFor:'accessing'!
iterator:aOneArgBlock startValue:startValue
iterator := aOneArgBlock.
lastValue := startValue.
! !
!RecursiveSeriesStream methodsFor:'reading'!
next
"return the next element from the stream by evaluating the nextBlock"
|prevValue|
prevValue := lastValue.
lastValue := iterator value:lastValue.
^ prevValue
! !
!RecursiveSeriesStream class methodsFor:'documentation'!
version_CVS
^ '$Header$'
! !