[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: a=0; a([1,1])++ -> a == 2
From: |
Dirk Laurie |
Subject: |
Re: a=0; a([1,1])++ -> a == 2 |
Date: |
Thu, 3 Aug 2000 08:46:55 +0200 |
Etienne Grossmann skryf:
>
> Hello,
>
> sorry if the answer to my question is a clear-cut "no" or if it has
> already been discussed.
>
> Wouldn't it make sense to have the code
>
> a=0; b = a([1,1])++ ;
>
> be equivalent to either
>
> a=0; b=a([1,1]); b++; for i in [1,1], a(i)++ ; end
>
> yielding a == 2, b == [1;1]
> or
> a=0; b=zeros(size(a)); for i in [1,1], b(i) = a(i)++ ; end
>
> yielding a == 2, b == [1;2]
>
The ++ operator is inherited from C, and it would be highly confusing,
to say the least, if the behaviour should be different from that of C.
So the code
a=0; b = a([1,1])++ ;
should be equivalent to
a=0; b=a([1,1]); a([1,1])=a([1,1])+1;
whereas
a=0; b = ++a([1,1]) ;
should be equivalent to
a=0; a([1,1])=a([1,1])+1; b=a([1,1]);
Therefore in the first case, an experienced C programmer would expect
a == 1; b == [0;0];
and in the second
a == 1; b == [1;1];
This is indeed what Octave 2.1.30 delivers.
If you need to vectorize
for k in I, a(k)++; end
to work also when there are repeated indices, you could use
J=sort(I);
k=find([1,diff(J)]);
a(J(k))=diff([k,length(J)+1]);
Dirk
-----------------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.
Octave's home on the web: http://www.che.wisc.edu/octave/octave.html
How to fund new projects: http://www.che.wisc.edu/octave/funding.html
Subscription information: http://www.che.wisc.edu/octave/archive.html
-----------------------------------------------------------------------