3

我可以在if语句中执行此操作,还是应该创建一个辅助布尔变量?这是我到目前为止的代码。顺便说一句,IOX@就是从用户那里得到输入。

: var
compile: VARIABLE
complile: ;

: lock
compile: var realPass$
compile: realPass$ "password" !
compile: ." Enter Password: "
compile: var pass$
compile: IOX@ pass$ !
compile: var match
compile: realPass$=pass$ match ! Unknown token: realPass$=pass$
4

1 回答 1

6

比较字符串的 ANS FORTH 字是COMPARE (c-addr_1 u_1 c-addr_2 u_2 -- n). 在 FORTH 中,用s"单词创建了一个字符串,一个字符串由一个内存地址和一个长度组成。这意味着当您比较字符串时,您将提供COMPARE两个字符串的内存地址和长度。

结果COMPARE如下:0如果两个字符串相等,-1为小于,1为大于。这与提供比较器或比较运算符的其他语言相同。请注意,在 FORTHtrue-1,因此检查 . 的二进制返回没有任何价值compare

通常 Forth 会避开显式变量以支持使用堆栈,因此IF直接使用它而不需要额外的变量就可以了。

: PWCHECK
  COMPARE
  IF ." Entry denied."
  ELSE ." Welcome friend." THEN
  CR
;

S" Hello" ok
S" Goodbye" ok
PWCHECK You are not wanted here. ok
S" Howdy"  ok
S" Howdy"  ok
PWCHECK Welcome friend. ok
于 2013-07-03T20:52:59.367 回答