The expression `(i-1) % length + 1` is not correct for negative `i`.
You have to use `mod` instead of `%`.

Julia has a function `mod1(x,y)` that is essentially defined as
`mod(x-1, y) +1`, so that's what you probably want to use.

-erik

On Sat, Feb 6, 2016 at 8:40 PM, Cedric St-Jean <[email protected]> wrote:
> You can define our own datatype to do this. It's one of the most fundamental
> tasks in Julia!
>
> immutable CircularArray{T}
>     arr::Vector{T}
> end
>
> Base.getindex(ca::CircularArray, i) = ca.arr[(i-1) % length(ca.arr) + 1]
> Base.setindex(...) = ...
> ...
>
> a = CircularArray([1,2,3])
> a[14] # yields 2
>
> Cédric
>
>
> On Saturday, February 6, 2016 at 7:08:03 PM UTC-5, Ferran Mazzanti wrote:
>>
>> Hi folks,
>>
>> I was wondering if it is possible to use in a simple way cyclic arrays in
>> Julia? What I'm after is sometbing that understands that the next element in
>> a[] after end is a[1], so a[end+1]=a[1], a[end+2]=a[2] etc... I know I can
>> index the array with the remainder operator % to achieve this same result,
>> but I wonder if one can declare the array directly in one way or another to
>> achieve this directly.
>>
>> Thanks in advance,
>>
>> Ferran.



-- 
Erik Schnetter <[email protected]>
http://www.perimeterinstitute.ca/personal/eschnetter/

Reply via email to