<div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Greg Troxel said:<br>> We are really re-inventing the traditional HP RPN, and<br>> that's ok, but it's better to re-implement it as<br>> consistently as possible.<br><br>Actually Chuck Moore implemented Forth already in 1968,<br>four years before HP-35, the first HP RPN calculator,<br>was introduced. So in that sense "swap" is historically<br>more consistent than the 1984 PostScript "exch".<br><br>My trusty old HP-15, now doing attic service, had a "x<>y"<br>key for "swap", and I see on the Wikipedia photo [1],<br>that that "x<>y" was used all the way back to the 1972 HP-35.<br><br>The HP-48G, introduced in 1990, according to the photo [2]<br>had a key labelled "swap", so HP RPN appears to be more<br>true to Forth, than to PostScript.<br><br>So for HP, as well as Forth, consistency, "swap" would be<br>preferable.<br><br>The bad thing, however, is that PROJ stacks do not work as<br>one would immediately expect: Actually, there are 4 separate<br>stacks, one for each coordinate, so doing a "push v_1 v_2"<br>followed by a "pop v_2 v_1" does not do any swapping (sse the<br>example in footnote [4], and try to play with different orders<br>of v_1 and v_2).<br><br>Hence, you need to do a preparatory axisswap step to actually<br>put the first coordinate onto the second coordinate stack (from<br>where it can be pop'd back into the first coordinate of the<br>operand). I tend to forget this...<br><br>Rust Geodesy [4] makes do with one stack, but for semi-consistency<br>with PROJ, always pushes and pops in fixed order, i.e. pop v_2 v_1<br>gives the same result as pop v_1 v_2<br><br>In order to follow the principle of least astonishment (POLA) [5],<br>I would have preferred a single stack, and push/pop in consistent<br>order. But since the state of things are as they are, keeping POLA<br>will probably require us to keep things as is.<br><br><br>[1] <a href="https://en.wikipedia.org/wiki/HP-35#/media/File:HP-35_Red_Dot.jpg">https://en.wikipedia.org/wiki/HP-35#/media/File:HP-35_Red_Dot.jpg</a><br>[2] <a href="https://upload.wikimedia.org/wikipedia/commons/9/95/HP48G.jpg">https://upload.wikimedia.org/wikipedia/commons/9/95/HP48G.jpg</a><br>[3] echo 1 2 3 4 | cct proj=pipeline step proj=push v_1 v_2 step proj=pop v_2 step proj=pop v_1  --<br>[4] <a href="https://github.com/busstoptaktik/geodesy">https://github.com/busstoptaktik/geodesy</a><br>[5] <a href="https://en.wikipedia.org/wiki/Principle_of_least_astonishment">https://en.wikipedia.org/wiki/Principle_of_least_astonishment</a><br>
</blockquote></div></div>