标签: forth

Forth源代码文件最常用的文件扩展名是什么?

我看到有人救第四源代码文件与扩展.4th,.fth,.frt.f.哪个是Forth源代码文件最常用的文件扩展名?

conventions forth

8
推荐指数
2
解决办法
1680
查看次数

Forth 编程语言中的“局部变量”是什么意思?

在 C 中,局部变量存在于函数内部并包含如下值:

void main(){
    int a = 5;
    int b = 9;
}
Run Code Online (Sandbox Code Playgroud)

在 Gforth 手册中,他们这样描述局部变量:

: swap { a b -- b a }
  b a ;
1 2 swap .s 2drop
Run Code Online (Sandbox Code Playgroud)

但它似乎是一个带有两个参数ab的函数。

另一个关于 Forth 语言的教程显示了一个像这样的变量:

variable a
3 a !    ( ! to store the value )
Run Code Online (Sandbox Code Playgroud)

那么,哪一个是正确的呢?

forth gforth

8
推荐指数
1
解决办法
867
查看次数

在Forth实施SWAP

我在接受Chuck Moore采访时看到,他说:

操纵该堆栈的单词是DUP,DROP和OVER周期.没有,SWAP很方便你想要它,但它不是机器指令.

所以我试图SWAP仅仅实现DUP,DROP而且OVER,但是无法弄清楚如何做到这一点,至少不增加堆栈.

怎么样,真的吗?

forth

7
推荐指数
2
解决办法
951
查看次数

如何在Gforth中编写while()循环

我想在Gforth写一个while()循环.不幸的是,由于缺少示例,在线唯一的教程没有用,计数循环的例子(我不想要的)看起来根本不同.

如何表示这样的事情的一些具体例子是什么?

while (x > 3) { print(x); x--; }
Run Code Online (Sandbox Code Playgroud)

或者,实际上,只是表达形式的任何具体方式:

while (predicate) { expression(s) }
Run Code Online (Sandbox Code Playgroud)

forth gforth

7
推荐指数
1
解决办法
1332
查看次数

如何在Forth中排序参数

在Forth中定义单词时选择参数顺序的一般规则(经验法则)是什么?

例如,在控制一些伺服系统的情况下,让我们定义SERVO!哪个伺服通道的位置.

!的方式,它应该是: SERVO! ( val #ch -- ),但另一方面不让它看起来更天然是: SERVO! ( #ch val -- )

forth

7
推荐指数
1
解决办法
170
查看次数

如何在Forth中输入数字

是否有类似于inputBasic或scanf("%d")C in Forth的东西?

可能会是这样的:

200 buffer: buf
: input ( -- n ) buf 200 accept 
  some-magic-filter
  buf swap evaluate ;
Run Code Online (Sandbox Code Playgroud)

上面代码中的问题是如何定义一个只传递数字的过滤器,而不是任何单词,定义等?

forth

7
推荐指数
1
解决办法
261
查看次数

Forth LEAVE ... LOOP 是如何实现的,因为事先不知道 LEAVE 的数量?

LOOP 一词被描述为“解析所有未解析的 LEAVE 事件的目的地”。(强调我的)

与 IF ... ELSE ... THEN 的前向引用数始终为 1 不同,LOOP 对 LEAVE 的数量没有限制。那怎么实施呢?

我想到的一种方法是始终将 LEAVE 的数量保持在堆栈顶部。每个 LEAVE 都会增加此计数器并将其置于其下。LOOP 从顶部读取计数器并解析那么多引用。但这似乎是一个便宜的伎俩。

真正的 Forth 系统如何实现这种循环?我不需要 teh codez(将 Forth 作为学习经验实施),只需要概念。

language-implementation forth

7
推荐指数
1
解决办法
364
查看次数

在 Forth 中打印双引号

该单词."打印一个字符串。更准确地说,它将 和 字符串编译到当前编译的单词中的(.")下一个。"

但我怎样才能打印

这就是问题所在”。

与福斯?

forth

7
推荐指数
2
解决办法
516
查看次数

如何在用C编写的类似FORTH的语言解释器中实现LOOP

我正在用C编写一个简单的基于堆栈的语言,并且想知道我应该如何实现某种循环结构和/或前瞻符号.由于这个页面的代码有点长(超过200行),我把它放在GitHub存储库中.

编辑:主程序存档stack.c.

编辑:代码只是输入words,类似于FORTH.它使用scanf和从左到右工作.然后它使用一系列ifs和strcmps来决定做什么.真的是这样的.

c interpreter loops forth lookahead

6
推荐指数
2
解决办法
3951
查看次数

获取FORTH中的当前堆栈大小

如何获得Forth中当前保存在堆栈中的元素数量?

我问这个是因为我想创建一个打印出堆栈所有元素的函数,例如:

: pop_all 0 do . loop ;
1 5 10 4 5
5 pop_all
Run Code Online (Sandbox Code Playgroud)

但是现在我需要在调用它时手动指定堆栈大小.

stack forth

6
推荐指数
1
解决办法
1071
查看次数