>From julia box macro m(a, b) @show isa(a,Int) isa(b,Symbol) end
@m(1,last) > isa(a,Int) => true >> >> > > isa(b,Symbol) => true > > Dne středa 25. května 2016 14:26:30 UTC+2 Yichao Yu napsal(a): > > > On May 25, 2016 8:19 AM, "Ford Ox" <[email protected] <javascript:>> > wrote: > > > > Lets change compiler so it replace > > array[i] > > > > with > > @getindex(array, i) > > > > instead of > > getindex(array, i) > > > > What we gain: > > > > array[end] > > > > :end can be converted to length(array) in julia itself which is nice! > > > > collections (dict, set, queue...) > > > > dequeue = ... # its a linked list > > dequeue[first] > > dequeue[last] # IMO :last causes less confusion than :end for new > programmers, but it doesn't really matter > > dequeue[3] > > > > > > macro getindex(q:Queue, key) > > key == :first && return :(peekfirst(q)) # complexity O(1) > > key == :last && return :(peeklast(q)) # complexity O(1) > > isa(key, Int) && return :(peek(q, key)) # complexity O(n) > > end > > No, the type info is not available at syntax level. > > > > > > > let's say that we would also have special syntax for > > > > popindex() > > array[index]-- #completely made up > > > > and insertindex() > > array[index]++ > > > > Then we could do the similar thing as above > > macro popindex(q:Queue, key) > > key == :first && return :(shift!(q)) > > key == :last && return :(polll!(q)) > > isa(key, Int) && return :(deleteat!(q, key)) > > end > > macro insertindex ..... > > > > > > This looks pretty nice, don't you think? > > > > We could even some crazy stuff like this: > > type Foo > > a; b; c; d > > end > > > > macro setindex(f::Foo, key, value) > > return :(setfield(f, key, value)) > > end > > > > f = Foo(1, 2, 3, 4) > > f[c] = 10 > > Seems like we don't need the dot accessing aka foo.var huh? > > >
