我可以在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$
答案 0 :(得分:5)
用于比较字符串的ANS FORTH字是COMPARE (c-addr_1 u_1 c-addr_2 u_2 -- n)
。在FORTH中,使用s"
字创建字符串,字符串由内存地址和长度组成。这意味着当您比较字符串时,您将向COMPARE
提供两个字符串的内存地址和长度。
COMPARE
的结果如下:0
如果两个字符串相等,-1
表示小于,1
表示大于。这与提供比较器或比较运算符的其他语言相同。 注意,在FORTH true
中为-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