I think the types of your inputs might be wrong. In particular, I think the
type of the inner containers isn't right: you're getting Array{Array{T,N},1}
when you wanted Array{Array{E,1},1} for some specific E.
-- John
On Sep 7, 2014, at 5:50 PM, Zenna Tavares <[email protected]> wrote:
> What am I doing wrong with my parametric types?
>
> I have this Cartesian product function
>
> function cart_product{E}(n, A::Vector{Vector{E}})
> lengths = [length(a) for a in A]
> elems = Array(E, length(A))
> accum_lengths = Array(Integer, length(A))
> accum_lengths[1] = prod(lengths[2:])
> for i = 2:length(A)
> accum_lengths[i] = accum_lengths[i-1] / lengths[i]
> end
>
> cycle_lengths = [24/accum_lengths[i] for i = 1:length(A)]
> scales = cycle_lengths ./ lengths
>
> is = [div((n % cycle_lengths[i]),scales[i]) + 1 for i = 1:length(A)]
>
> for i = 1:length(A)
> elems[i] = A[i][is[i]]
> end
> elems
> end
>
>
>
> I am getting type errors with the either of the following
>
> v = Array[["a", "b"],["c", "d", "e"],["f", "g", "h", "i"]]
> v = Array[[1, 2],[3, 4, 5],[6, 7, 8, 9]]
> cart_product(1,v)
>
> cart_product` has no method matching cart_product(::Int64,
> ::Array{Array{T,N},1})
>
> What's going wrong here?