Le 11/01/2014 19:05, Tobias Boege a écrit : > Hi, > > I just spent two good hours over my implementation of an algorithm to > arrange some PointFs in an array so that the distance between P[i] and > P[i+1] is the smallest possible among all points P[j], j > i. I don't > want to bother you with details (well, I think I already did, sorry) but > the comparison of two points is not only a function of these two points > but also of some other reference point. So I used a line like this: > > Swap $aPoints[iInd + 1], $aPoints[GetNearest(iInd)] > > which means: get me the index of the nearest point to $aPoints[iInd] and > swap $aPoints[iInd + 1] with the value there. This effectively sorts my > array into the desired order (For iInd = 0 To $aPoints.Max - 1). > > Well, not really. Because Swap is not immune to side effects induced by > the expressions to swap. The wiki states that implicitly by saying that > > Swap A, B > > is equivalent to > > tmp = A > A = B > B = tmp > > So my code really was: > > tmp = $aPoints[iInd + 1] > $aPoints[iInd + 1] = $aPoints[GetNearest(iInd)] > $aPoints[GetNearest(iInd)] = tmp > > which leads to an erroneous array because GetNearest() is a function of > $aPoints[iInd + 1] which changed between the two invocations. [ The funny > thing is that, due to the nature of GetNearest(), the result of the above > three lines for all iInd is that the array remains unchanged. ] > > To cut a long story short, is this by design? Do you think it's worth > changing that behaviour (it wouldn't break any sane use of Swap)? If not > it's equivalently fine. I'll add a clear warning to the wiki, then. > > Regards, > Tobi >
As stated by the documentation, 'Swap' is just syntactic sugar for: tmp = A A = B B = tmp Each Swap expression will be evaluated twice (once as an expression, and once as an assignment). It's like a C macro. So I'm afraid it won't change! -- Benoît Minisini ------------------------------------------------------------------------------ CenturyLink Cloud: The Leader in Enterprise Cloud Services. Learn Why More Businesses Are Choosing CenturyLink Cloud For Critical Workloads, Development Environments & Everything In Between. Get a Quote or Start a Free Trial Today. http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user