That's because ifelse is just a function, not an operator with special syntax. The ternary operator is just a one-line form of the if-else and requires the condition to be a single boolean value. It is a genuine control flow construct, not a function.
On Fri, Jun 6, 2014 at 11:54 PM, David Einstein <dei...@gmail.com> wrote: > It looks like you have vectorized ifelse, the operator version just > doesn't work. This code is on line 379 of operators.jl > > function ifelse(c::AbstractArray{Bool}, x, y) > reshape([ifelse(ci, x, y) for ci in c], size(c)) > end > > If I do > > ifelse((1:10 .< 5) , 1 , 0) > > then everything works. > > however > > (1:10 .< 5) ? 1 : 0 > > does not. I'm not sure why. > > Also it appears that ifelse is not automatically imported like the rest of > the operators from base are. > > > On Friday, June 6, 2014 10:58:10 PM UTC-4, Stefan Karpinski wrote: > >> We should probably vectorize the ifelse function. >> >> On Jun 6, 2014, at 10:51 PM, David Einstein <dei...@gmail.com> wrote: >> >> sqrt(x.^2 .+ y.^2) .< radius >> is a vector of booleans >> >> ?: >> expects a boolean >> >> you probably want something like: >> >> inside_disc(x,y,radius) = map(good -> good ? 1 : 0, >> sqrt(x.^2+y.^2).<radius) >> >> >> >> On Friday, June 6, 2014 10:18:36 PM UTC-4, Zahirul ALAM wrote: >>> >>> When I pass two arrays the function returns: >>> >>> >>> type: non-boolean (BitArray{1}) used in boolean context while loading >>> In[10], in expression starting on line 1 >>> >>> >>> >>> I have modified the function to address the element wise operation as >>> follows: >>> >>> >>> inside_disc(x,y,radius) = sqrt(x.^2 .+ y.^2) .< radius ? 1 : 0 >>> >>> seems to me that the error is being thrown by .< operation. What am I >>> missing? >>> >>> >>> On Friday, 6 June 2014 20:34:22 UTC-4, Miguel Bazdresch wrote: >>>> >>>> I'm not sure I understand the question. Do you mean something like this? >>>> >>>> inside_disc(x,y,radius) = sqrt(x^2+y^2)<radius ? 1 : 0 >>>> >>>> -- mb >>>> >>>> >>>> On Fri, Jun 6, 2014 at 8:28 PM, Zahirul ALAM <zahiru...@gmail.com> >>>> wrote: >>>> >>>>> I guess one can do a for loop. But how do I vectorize the code? >>>>> >>>>> >>>>> On Friday, 6 June 2014 20:27:46 UTC-4, Zahirul ALAM wrote: >>>>>> >>>>>> How would one implement a step function like behaviour in julia? In >>>>>> mathematica one can write the following to create a circle with value of >>>>>> 1 >>>>>> within the radius and 0 outside >>>>>> >>>>>> UnitBox[Sqrt[X^2 + Y^2]*0.5/radius]; >>>>>> >>>>>> X and Y are the coordinates. >>>>>> >>>>> >>>>