返回入门教程首页 主页 | 开发工具 | 应用芯片 | 核心模块  
 
   
 

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 .

 

 

   

(C) ForthChina.com 版权所有 2004-2010
Email:forthchina@163.com