function - 如何读取用户输入的整数并在 Forth 中提供函数?

标签 function fibonacci forth

我在 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 数并将其转换为单精度。我们需要把旗帜移开,这样我们才能找到数字。暂时将某些东西移开的标准技巧是将其从数据堆栈移到返回堆栈,执行您需要执行的任何操作,然后将其移回。因此,>rr> .

关于function - 如何读取用户输入的整数并在 Forth 中提供函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52954767/

相关文章:

c - 将结构指针或数组作为函数参数传递

swift - 使用 `self` 作为静态/类方法的默认参数

algorithm - 仅使用 2 或 3 从 0 达到 N 的方法有多少种?

php - 循环遍历描述螺旋的公式以生成 XY 坐标

c++ - 是否可以在 GA144 上运行仿真的 C 代码?

javascript - 用于多绘图的 jQuery 就绪函数

python - 在python函数中传递带有varargs的默认参数

c++ - 如何使用 C++ 中的递归打印斐波那契数列最多 n 个数字

forth - 是否可以在 Forth 定义中使用 tick?

char - 使用 Gforth 获取 ASCII 码