Hmmm... maybe there is an issue with the following:
  | | |_| | | | (_| |  |  Version 0.5.0-dev+1137 (2015-11-04 03:36 UTC)
 _/ |\__'_|_|_|\__'_|  |  Commit 95b7080 (5 days old master)
|__/                   |  x86_64-linux-gnu


julia> collect(1:3)
3-element Array{Int64,1}:
 1
 2
 3


julia> collect(rest(1:3,start(1:3)))
3-element Array{Any,1}:
 1
 2
 3


Shouldn't the type of both arrays be the same? (the latter defined in 
non-global context still yield Any Array).

On Monday, November 9, 2015 at 10:45:12 PM UTC+2, Dan wrote:
>
> the example with `pull` before, traverses the iterator's beginning 
> twice... what one probably wants is:
>
> julia> function pull(itr,n::Int)
>        state = start(itr)
>        head = eltype(itr)[]
>        while n>0 && !done(itr,state)
>            val,state = next(itr,state)
>            push!(head,val)
>            n-=1
>        end
>        (head,rest(itr,state))
>        end
> pull (generic function with 2 methods)
>
>
> julia> head,tail = pull([1,2,3,4,5],3)
> ([1,2,3],Base.Rest{Array{Int64,1},Int64}([1,2,3,4,5],4))
>
>
> julia> collect(tail)
> 2-element Array{Any,1}:
>  4
>  5
>
>
> note the first call already pulls the first 3 elements and collects them 
> into an array (one can't get to the next elements without first reading the 
> head.
>
> On Monday, November 9, 2015 at 10:39:48 PM UTC+2, andrew cooke wrote:
>>
>>
>> oh that's interesting.  this is from 
>> https://github.com/JuliaLang/Iterators.jl i guess.
>>
>> it doesn't support read though (which i didn't realise i needed when i 
>> first asked).
>>
>> i'll add a warning to StatefulIterators pointing people to this.
>>
>> thanks,
>> andrew
>>
>> On Monday, 9 November 2015 17:07:52 UTC-3, 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