如何比较Forth中的两个字符串



我可以在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$

用于比较字符串的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

相关内容

  • 没有找到相关文章

最新更新