oh, ok :o(

On Monday, 9 November 2015 17:36:13 UTC-3, Dan wrote:
>
> ouch... my suggestion takes care of the first output, but the second 
> output repeats the start of the sequence. but `chain` is a useful method to 
> convert an array to an iterable. anyway, I've concocted a method to 
> generate the desired behavior:
>
> julia> function pull(itr,n)
>        state = start(itr)
>        for i=1:n state = next(itr,state)[2] ; end
>        (take(itr,n),rest(itr,state))
>        end
> pull (generic function with 1 method)
>
>
> julia> stream = 1:5
> 1:5
>
>
> julia> head, tail = pull(stream,3)
> (Base.Take{UnitRange{Int64}}(1:5,3),Base.Rest{UnitRange{Int64},Int64}(1:5,
> 4))
>
>
> julia> collect(head)
> 3-element Array{Int64,1}:
>  1
>  2
>  3
>
>
> julia> collect(tail)
> 2-element Array{Any,1}:
>  4
>  5
>
> the idea is to use the defined `pull` function to generate the head and 
> tail iterators. this must be so, since the state of the iterators after the 
> first few elements must be remembered somewhere.
>
> On Monday, November 9, 2015 at 10:07:52 PM UTC+2, Dan wrote:
>>
>> XXX in your questions = chain.
>> Or more clearly:
>> julia> stream = chain([1,2,3,4,5])
>> Iterators.Chain(Any[[1,2,3,4,5]])
>>
>> julia> collect(take(stream, 3))
>> 3-element Array{Any,1}:
>>  1
>>  2
>>  3
>>
>>
>> On Monday, November 9, 2015 at 7:47:51 PM UTC+2, andrew cooke wrote:
>>>
>>>
>>> hmmm.  maybe i'm doing it wrong as that only gives a factor of 2 speedup.
>>>
>>> anyway, it's all i need for now, i may return to this later.
>>>
>>> thanks again,
>>> andrew
>>>
>>> On Monday, 9 November 2015 14:11:55 UTC-3, andrew cooke wrote:
>>>>
>>>>
>>>> yes, i'm about to do it for arrays (i don't care about performance 
>>>> right now, but i want to implement read with type conversion and so need 
>>>> the types).
>>>>
>>>> On Monday, 9 November 2015 11:20:47 UTC-3, Yichao Yu wrote:
>>>>>
>>>>> On Mon, Nov 9, 2015 at 8:04 AM, andrew cooke <and...@acooke.org> 
>>>>> wrote: 
>>>>> > 
>>>>> > https://github.com/andrewcooke/StatefulIterators.jl 
>>>>>
>>>>> FYI, one way to make this more efficient is to parametrize the 
>>>>> iterator. You could easily do this for Array's. In the more general 
>>>>> case, you needs type inference to get the type right for a 
>>>>> non-type-stable iterator (iterator with a type unstable index...) but 
>>>>> it's generally a bad idea to write code that calls type inference 
>>>>> directly. 
>>>>>
>>>>> > 
>>>>> > 
>>>>> > On Monday, 9 November 2015 06:24:14 UTC-3, andrew cooke wrote: 
>>>>> >> 
>>>>> >> thanks! 
>>>>> >> 
>>>>> >> On Sunday, 8 November 2015 22:40:53 UTC-3, Yichao Yu wrote: 
>>>>> >>> 
>>>>> >>> On Sun, Nov 8, 2015 at 8:11 PM, andrew cooke <and...@acooke.org> 
>>>>> wrote: 
>>>>> >>> > I'd like to be able to use take() and all the other iterator 
>>>>> tools with 
>>>>> >>> > a 
>>>>> >>> > stream of data backed by an array (or string). 
>>>>> >>> > 
>>>>> >>> > By that I mean I'd like to be able to do something like: 
>>>>> >>> > 
>>>>> >>> >> stream = XXX([1,2,3,4,5]) 
>>>>> >>> >> collect(take(stream, 3)) 
>>>>> >>> > [1,2,3] 
>>>>> >>> >> collect(take(stream, 2)) 
>>>>> >>> > [4,5] 
>>>>> >>> > 
>>>>> >>> > Is this possible?  I can find heavyweight looking streams for 
>>>>> IO, and I 
>>>>> >>> > can 
>>>>> >>> > find lightweight iterables without state.  But I can't seem to 
>>>>> find the 
>>>>> >>> > particular mix described above. 
>>>>> >>> 
>>>>> >>> Jeff's conclusion @ JuliaCon is that it seems impossible to 
>>>>> implement 
>>>>> >>> this (stateful iterator) currently in a generic and performant way 
>>>>> so 
>>>>> >>> I doubt you will find it in a generic iterator library (that works 
>>>>> not 
>>>>> >>> only on arrays). A version that works only on Arrays should be 
>>>>> simple 
>>>>> >>> enough to implement and doesn't sound useful enough to be in an 
>>>>> >>> exported API so I guess you probably should just implement your 
>>>>> own. 
>>>>> >>> 
>>>>> >>> Ref 
>>>>> >>> 
>>>>> https://groups.google.com/forum/?fromgroups=#!searchin/julia-users/iterator/julia-users/t4ZieI2_iwI/3NTw1k406qkJ
>>>>>  
>>>>> >>> 
>>>>> >>> > 
>>>>> >>> > (I think I can see how to write it myself; I'm asking if it 
>>>>> already 
>>>>> >>> > exists - 
>>>>> >>> > seems like it should, but I can't find the right words to search 
>>>>> for). 
>>>>> >>> > 
>>>>> >>> > Thanks, 
>>>>> >>> > Andrew 
>>>>> >>> > 
>>>>>
>>>>

Reply via email to