该Gforth文件说,通过调用访问论点next-arg
,但这种省略的程序名,这将在一个类似C语言进行打印.
因为argv[0]
似乎是自动从Forth中的参数向量中删除,是否有一个我可以调用它返回它的特殊函数?
当进入'a'
Gforth时,字符的ASCII编号(通过使用key
单词并按下将被放入堆栈的相同数字a)放入堆栈.
例如,这不适用于' '
(空格).代替:
' ' ok
.s <1> 34384939008 ok
Run Code Online (Sandbox Code Playgroud)
数字"应该"为32.这个行为有什么解释?除了手动将对应于' '
(空间)的ASCII数字放在堆栈上之外,可以做些什么 ?
当我在脚本顶部有一个shebang时,我无法让Gforth运行,例如:
#!/usr/bin/gforth
: pinoke ." I'm a real boy!!! "
pinoke
Run Code Online (Sandbox Code Playgroud)
Unix似乎正在推出gForth,但gForth本身在shebang线上窒息.我不确定如何定义一个单词以使Forth以不同的方式解释shebang线(不是说它不能完成,但我只是不确定它是怎么回事).
我已经考虑过使用脚本将代码文件提供给gForth,但是反复做这件事可能相当尴尬.有没有办法让gForth像其他语言一样接受shebang?
听说只要在运算符前面加一个F,然后在最后加一个(.),就可以计算出浮点数,然后显示出来。但它给了我这个答案:
2 3 F/ .
:8: Floating-point stack underflow
2 3 >>>F/<<< .
Backtrace:
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到0.66666667 ok
?
正如我记得FIG-Forth的'tick',当一个单词不在单词表中时,它可以在没有堕胎的情况下使用:
' the_word
Run Code Online (Sandbox Code Playgroud)
如果它出现在单词列表中,则引用该单词,否则给出"假".
是否有可能在ANS Forth中构建类似于与[if],[then]和[else]一起使用的东西?
我正在尝试使用递归定义来实现Hofstadter的Q序列:
Q(1) = 1
Q(2) = 1
Q(n) = Q(n - Q(n-2)) + Q(n - Q(n-1)) for n > 2
Run Code Online (Sandbox Code Playgroud)
我得到的错误结果n > 3
。这是我到目前为止的内容:
: Q recursive
dup 3 <
if
drop 1
else
dup dup 2dup 2 - Q - Q -rot 1- Q - Q +
then ;
Run Code Online (Sandbox Code Playgroud)
在线尝试: http : //ideone.com/PmnJRO(编辑:现在具有固定,正确的实现)
我认为这是行不通的,因为每次调用Q
where n
大于之后,都会向堆栈中添加值2
,从而使-rot
行不通。
是否有一个简单的调整即可完成这项工作?还是我需要使用其他方法,也许将变量用于n
?
OEIS:A005185
我正在尝试使用两个循环反转堆栈,第一个循环将数据堆栈中的项目发送到返回堆栈。另一个将它们从返回堆栈转移到数据堆栈。不幸的是,它不起作用& gforth 返回堆栈下溢错误。下面是代码:
: srev ( n n2 n3 n4 n5 -- n5 n4 n3 n2 n)
6 0 do >r loop
6 0 do r> loop ;
1 2 3 4 5 srev
Run Code Online (Sandbox Code Playgroud) 我正在使用Gforth来尝试实现取幂.从理论上讲,我理解基于堆栈的语言应该如何运作.但是,我在Gforth上实现它时遇到了困难.
这就是我现在所拥有的:
: myexp
1 swap ?do rot dup * rot rot loop ;
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,我看到一个堆栈下溢,如:
3 2 myexp
:1: Stack underflow
3 2 >>>myexp<<<
Backtrace:
$7F645EFD6EF0 rot
$2
$1
Run Code Online (Sandbox Code Playgroud)
Gforth的循环结构是否在循环时操纵堆栈?
我对Forth的工作方式一无所知,因为我在网上看到的大多数循环示例都让Foss的新人感到困惑和困惑.
我的实施有什么问题?
我想要一个像这样的词
read-site ( add n buff max -- n flag )
Run Code Online (Sandbox Code Playgroud)
其中“add n”是站点名称缓冲区,“buff max”是应读取 ASCII 文本的缓冲区,“n”是读取的字节数,flag
如果操作成功则为 true。
这在 Linux、Android 或 Windows 的 Gforth 中可能吗?