快速运算符
1+ 代替 + 的好处,第一,每次使用都能节省一些词典空间;第二,由于这种词都是用各个具体机器语言特殊定义的,具有该机器结构上的优点,执行起来比用 1 和 + 快;第三,可节省编译时间;
杂项算术运算符
ABS 求栈顶的数的绝对值再放回栈中
MIN 取栈中最前面的两个数比较大小,取最小的一个数放回栈中
返回堆栈
forth系统两个堆栈,一个参数堆栈(通常使用,一般叫做堆栈),一个返回堆栈;
参数堆栈: 参数堆栈用来保存词与词之间所传递的参数(或称自变量)的堆栈。
返回堆栈: 用来保存一些“指针”的堆栈。也可以当作参数堆栈的辅助栈来使用,在参数堆栈进行操作时,可用返回堆栈暂存某些值。
注意:返回堆栈中无论放了什么内容,当你到达定义结束(;)之前必须把它们再移出返回堆栈,因为此时 FORTH 系统要在返回堆栈中寻找指针了。返回堆栈不能用来传递词与词之间的参数。
//图片中的栈标志都是描述参数堆栈的
R@ 复制返回栈顶的参数到参数栈
>R 和 <R 两个词必须成对出现在同一定义中。如果是用会话方式执行,则必须成对用于输入的同一行(即在按RETURN之前)
>R SWAP R>
利用返回栈计算 ax^2 + bx + c ( a b c x - - )
//后面三个与我用的pc/forth 2.0有区别
浮点运算
浮点显示:
定点计算效率高于浮点运算,效率高三倍;但是采用浮点运算程序设计效率会提高,程序员不必考虑输出结果的时候插入小数点。
乘—除换算符
*/ ( n1 n2 n3 -- n result ) ===> ( n1*n2 ) / n3
n1 * n2 的中间结果为32位,是 "一个双子长中间结果" , 用 * 和 / 不一定能代替 */
// 第三个的四舍五入错误,应该是73。
定义一个能舍入的白分词 R%
: R% 10 */ 5 + 10 / ; 先除以10在加上5,这样四舍五入的时候能保证正确
比例换算的透视
*/ 和 */MOD
// NEGATE 改变符号是把正数边负数,负数变正数;