我在 Forth 中编写了一段代码来计算第 9 个斐波那契数:
." Fibonacci numbers"
: INP 9 0 ;
: FIB_0 1 0 1 ;
: FIB FIB_0 INP DO + SWAP OVER LOOP SWAP . ;
现在我想从用户输入中读取整数 N 并将其提供给 INP 而不是 9,以便我可以计算任意整数斐波那契数。我在 Windows 上使用 Gforth。
最佳答案
您可以使用 accept
抓取用户输入,然后 s>number?
尝试将其转换为数字。 accept
需要一个内存地址和一个最大长度。 's>number?` 留下一个双倍和一个标志。
所以你可以做类似的事情
: fetch-input ( - n f )
pad 40 accept
pad swap s>number?
>r d>s r> ;
如
s>number?
无法将字符串转换为会留下的数字 0 0
在堆栈上的标志下。所以在
s>number?
之后您在堆栈上有三个条目: double 定点数的两个部分和一个标志 - 堆栈注释将是:( - n n f )。但我假设你想要一个单精度数,因为你的问题中的代码。d>s
将采用 double 数并将其转换为单精度。我们需要把旗帜移开,这样我们才能找到数字。暂时将某些东西移开的标准技巧是将其从数据堆栈移到返回堆栈,执行您需要执行的任何操作,然后将其移回。因此,>r
和 r>
.
关于function - 如何读取用户输入的整数并在 Forth 中提供函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52954767/