Forth 初学者指导 (使用Win32Forth)
原著 J.V. Noble
编译 Forth 中文网, ForthChina.com
原文 Win32Forth 系统联机在线文档
比较和分支
Forth 允许我们使用关系运算符 " > " " < " " = " 来比较堆栈上的两个数据。比如:
2 3 > <cr> ok
把 0 ( “假” ) 留在堆栈上,因为 2 (NOS) 不比 3 (TOS) 大。相反,短语:
2 3 < <cr> ok
在堆栈上留下 -1 ( “真” ) ,因为 2 比 3 小。
注意:在有些 Forth 系统中, “真”是 +1 而不是 -1 。关系操作消耗两个堆栈元素,留下一个标志以表示结果。 ( 许多 Forth 系统提供了单目的关系操作 “ 0= ”、“ 0> ” 和 “ 0< ” ,如你所想,这些操作符测试 TOS 内容是不是一个整数 0 、正数或者负数 ) 。
关系字用于分支和控制。例如:
: TEST 0 = INVERT IF CR ." Not zero!" THEN ;
0 TEST <cr> ok ( no action)
-14 TEST <cr>
Not zero! ok
TOS 与 0 作比较, INVERT 操作反转(位运算 NOT –在“ true ”和“ false ”之间反转) 结果标志, CR 发出一个回车(换行)。最后,如果 TOS 不是 0 , IF 消耗这个标志并执行位于它和 THEN 之间的所有代码。如果 TOS 是 0 ,则执行跳转到 THEN 之后的代码。
字 ELSE 用于 IF...ELSE...THEN 语句: TOS 中一个非 0 的值将导致IF 和 ELSE 之间的字被执行,而ELSE 和THEN 之间的字被跳过。一个 0 值产生相反的行为。这样:
: TRUTH CR 0 = IF ." false" ELSE ." true" THEN ;
1 TRUTH <cr>
true ok
0 TRUTH <cr>
false ok
因为 THEN 用来结束 IF 语句,所以它与一般高级语言中的意义不同,有些 Forth 编写者喜欢使用 ENDIF .
|