FORTH基本堆栈操作

堆栈操作
(a-b)/c;  后缀表示   a   b  -   c   /   
问题:不能把运算符全部放在后面,定义自己的词来解决问题;
SWAP    这个词是交换栈中栈顶和栈顶后的一个元素位置;eg:  1 2 . .   -->2 1 ok    |    1 2 SWAP  .  .  -->1  2  OK
rcA8BSpRea9p3y8Xv5bCzLtYF9tZxgiVuFQfntnOXjFWJn9Uox4ZViwivFhFfK8D7azk4jP1FVjAvQCjaWAAAAAElFTkSuQmCC
设:a = 10 , b = 4 , c = 2 ;
2 10 4 - SWAP / .                 diE9kd9gvoZDjycecj0IS49yZ7JiGh09lV5w0vmhHL9ATdVOGP3RxBwb0kJeeM9Gx9XZP5rIEGRv80lMFJMCYwUUwIjxZTASDElMH4BEAM4RNHmLVsAAAAASUVORK5CYII=            

常用堆栈操作:
B9R1JYmQeovRQAAAABJRU5ErkJggg==    CjEO8ZhsHwAAAAASUVORK5CYII=
12  DUP  .  .
DUP  *   .
7H6VRY4NLoVDNYD5w5IGPvAWErUZvJP9gUVhz6A88kKnvO2xK0PsG3XgVdMaa+aD5ZlNjqUyYl4GzWIDtANg2Zy+EZohhLZKJTGskQ2D+Cn54TUAaWj1g0MP0eRBL9BkAytQDK0AsnQCiTzAtfV7yvfRplnAAAAAElFTkSuQmCC

P3kj+vFG9OON6MebL7m98xjTUg+4AAAAAElFTkSuQmCC
a(a+b)---> a  b   OVER   +   *    . l4SWvK9LhaEPxOq2yR4fI79+XrnmsjR9glSurVB44k2aPOsXKVnDQiadV09K+ujb4eFo+8FpKMKkI4qQDqqAOl8AYGDFmnu4PJWAAAAAElFTkSuQmCC
ab-ba == b(a-c) Fk6GHKTbxVnIOc1HXo7cm5U30LUnOw7zIbVUbokuvQy5KxlKAqebZxyi6ER2FCnOn62F1pZYwpl+pmXUG86QUyeEcDFNAiQAEtAhTQIkABLQIUvtCl81FsweZxAAAAAElFTkSuQmCC

02+U7s9F39L0pQXG4pY55I577utnHeAV4FFDdphUQMByAgEICMQgIxAADICAcgIBCAjEICMQMAXc6k9s9+oF5QAAAAASUVORK5CYII=

显示栈顶元素,但是不弹出  .S      BQ51rpdYTFJtAAAAAElFTkSuQmCC


成对数堆栈操作

qOzeQAvAAAAAElFTkSuQmCC
说明:前缀“2”表明这些堆栈操作符都是成对处理数,也能用来处理双字长数。栈标志中的字母“d”表示成对数。
eg:
nNnHLEj9UUYAAAAASUVORK5CYII=    pcrm0H+HwOcqBuqOgbpjoO4YqDuGf9l3eV7E5KvRAAAAAElFTkSuQmCC

堆栈操作练习
1、ab+c c   a   b   *    + :  NUM1  *  +  .  ; +AAAAAElFTkSuQmCC
2、(a-4b)/6 +c a   4   b   *    -    ;    6   /    ;    c  + : NUM2_1    *     -   ;
: NUM2_2    6    /   ;
: NUM2_3    +   ;
SQzeQAAAABJRU5ErkJggg==
YVz4ZQLaAG90eI9xPqDToC8+ZkcGAAAAAAC35A9knSQqz27DlwAAAABJRU5ErkJggg==
3、a/8b a 8 b * / : NUM3       *     / PzLcO9PxNJAV6frdkBeZI7WKTO+kGAAAAABJRU5ErkJggg==
4、0.5ab/100 0.5 a b * * 100 / : NUM4_1  0.5 * * ;
: NUM4_2     100   /   ;
zqplQfYCRdrFer9zZD8VbQZvigIayeEOyDLF6Xg1wGxgGcBqOOirgKb8RtPfvLCLr9CzgAAAABJRU5ErkJggg==
5、a(2a+3) a 2 a * 3 + * : NUM5  2  *  3  +  *  ; AijZzcX9Bgnq9DdDWQdQpwcAAAC4A791Jt9LV10HJQAAAABJRU5ErkJggg==
6、(a-b)/c a b - c  / : NUM6_1   -   ;
: NUM6_2   /   ;
zDBSCcNIJdwBMxG3HkUXDlEAAAAASUVORK5CYII=

\\栈练习
a  b  c  ===   c   b  a SWAP    
ROT
自己实现OVER功能 :  MYOVER  SWAP  DUP  ROT  ROT  ;
实现<ROT  功能与ROT相反 1 2 3 === 3 1 2 :  <ROT  SWAP  ROT  SWAP  ;




转载于:https://www.cnblogs.com/meihao1203/p/6771488.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值