It does indeed happens inside the function, if you pass a function as an
argument to it (rather than refering to f implicitly in the function body,
you explicitly pass in f as an extra argument)
see below:
julia> f(x) = x + 1
f (generic function with 1 method)
julia> g(f, xs) = [f(x) for x in xs]
g (generic function with 1 method)
julia> xs = [1,2,3]
3-element Array{Int64,1}:
1
2
3
julia> g(f,xs)
3-element Array{Any,1}:
2
3
4
On Tuesday, November 4, 2014 2:22:24 AM UTC-5, Jutho wrote:
>
> This only happens in global scope, not inside a function? If you define
> f(list) = return [g(x) for x in list]
>
> then f(xs) will return an Array{Float64,1}.
>
> Op dinsdag 4 november 2014 03:23:36 UTC+1 schreef K leo:
>>
>> I found that I often have to force this conversion, which is not too
>> difficult. The question why comprehension has to build with type Any?
>>
>>
>> On 2014年11月04日 07:06, Miguel Bazdresch wrote:
>> > > How could I force the type of gxs1 to be of an array of Float64?
>> >
>> > The simplest way is:
>> >
>> > gxs1 = Float64[g(x) for x in xs]
>> >
>> > -- mb
>> >
>> > On Mon, Nov 3, 2014 at 6:01 PM, Evan Pu <[email protected]
>> > <mailto:[email protected]>> wrote:
>> >
>> > Consider the following interaction:
>> >
>> > julia> g(x) = 1 / (1 + x)
>> > g (generic function with 1 method)
>> >
>> > julia> typeof(g(1.0))
>> > Float64
>> >
>> > julia> xs = [1.0, 2.0, 3.0, 4.0]
>> > 4-element Array{Float64,1}:
>> > 1.0
>> > 2.0
>> > 3.0
>> > 4.0
>> >
>> > julia> gxs1 = [g(x) for x in xs]
>> > 4-element Array{Any,1}:
>> > 0.5
>> > 0.333333
>> > 0.25
>> > 0.2
>> >
>> > Why isn't gxs1 type of Array{Float64,1}?
>> > How could I force the type of gxs1 to be of an array of Float64?
>> >
>> > julia> gxs2 = [convert(Float64,g(x)) for x in xs]
>> > 4-element Array{Any,1}:
>> > 0.5
>> > 0.333333
>> > 0.25
>> > 0.2
>> >
>> > somehow this doesn't seem to work...
>> >
>> >
>> >
>> >
>>
>>