问题标签 [gforth]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
515 浏览

forth - 我在哪里可以找到 Forth / Gforth API?

几天前,我从《Starting Forth》一书开始学习 Forth。在编写了我的第一个程序后,我想知道是否有类似Java API或所有已实现方法的综合手册。

你能推荐我一个 Forth / Gforth API 吗?

0 投票
2 回答
639 浏览

definition - 如何在 Forth 定义中创建单词

我正在使用Gforth,我想在定义中创建一个词。在 Gforth 的 cmd 行中,我可以输入:

或者更具体地说,我定义了一个数组函数,它期望堆栈上的大小并创建一个带有该数组地址的单词:

因此,如果我输入10 array foo,我可以稍后使用foo

但是如果我10 array foo在另一个定义中写它会给我一个编译错误。我试过用s" foo"which compiles 替换 foo ,但它在运行时会爆炸,说:

尝试使用零长度字符串作为名称

有没有办法做到这一点?

0 投票
0 回答
670 浏览

emacs - Forth 模式 emacs gforth.el 使用时出错

总而言之,当我尝试使用 gforth.el 并打开 .fs 文件时,我从Emacs收到此错误消息:

错误:不知道如何编译 nil

我的.emacs 文件只有以下几行。

目录 gforth.el 包含在加载路径中。

Emacs 版本:24.3.1

尝试对文件进行字节编译会产生错误/警告:

0 投票
2 回答
743 浏览

forth - 在 Forth 中实现求幂

我正在使用Gforth来尝试实现求幂。从理论上讲,我了解基于堆栈的语言应该如何运行。但是,我在 Gforth 上实现它时遇到了困难。

这是我现在拥有的:

但是,当我运行它时,我看到一个堆栈下溢,如:

Gforth 的循环结构是否在循环时操纵堆栈?

我对 Forth 的工作原理一无所知,因为我在网上看到的大多数循环示例都相当复杂,而且对于 Forth 的新手来说很困惑。

我的实施有什么问题?

0 投票
1 回答
90 浏览

forth - Gforth 转换为双打的违规行为

我对Forth 中的s>dand函数如何工作感到相当困惑。d>s

从我读过的内容来看,打字16.0会放在160 0堆栈上(因为它占用两个单元格)并且d.会显示160.

现在,如果我输入,我16 s>d希望堆栈会像前面的示例一样显示出来。但是,堆栈 is和is 。160 0d.16016 0d.16

我输入的双打不正确吗?不是s>d像“将单格值转换为双格值那样简单吗?这种不规则性有什么原因吗?任何线索都将不胜感激。

0 投票
0 回答
256 浏览

c++ - 使用 Homebrew 在 OS X Mavericks (10.9) 上安装 Gforth 时出错

我正在尝试在我的MacBook Air(运行 OS X Mavericks (10.9))上安装Gforth ,但是会产生以下错误:brew install gforth

我知道问题是什么(libffi 是用旧版本的 C++ 标准库构建的),但我不确定如何使用Homebrew解决这个问题。我可以通过 Homebrew 卸载 libffi 并使用 libc++ 重新安装它,还是需要采取更严厉的措施?

0 投票
1 回答
456 浏览

string - 使用 Gforth 在多个字符串连接上堆栈下溢

Rosetta 代码中,我使用以下方法在 Forth 中连接字符串。

使用此代码,我希望能够将多个字符串连接在一起。但是,以下在 Gforth 上失败了

从我对 Forth 的基本了解中,我看到代码是将三个字符串放在堆栈上,然后将字符串附加到堆栈顶部并在其下方添加字符串,然后将新字符串再次附加到堆栈底部的字符串中。

为什么此代码在最后一个 + 位置下溢?有没有解决的办法?

0 投票
4 回答
1377 浏览

string - Gforth 将字符串值存储在变量中

我正在尝试将字符串值存储到变量中。要定义变量,我使用:

我可以轻松存储整数/浮点值以x使用

或者

为了访问它,我使用@f@。现在我正在尝试存储一个字符串值:

这样做的问题是它将两个值推送到堆栈(因为它是一个计数字符串),但x !只会将项目存储在顶部,即字符串的长度。这是危险的,因为堆栈内容可能在被x引用时已被修改,因此地址不直接低于长度(糟糕!),因此type会失败。所以我的问题是,有没有办法将两个值(地址和长度)存储到x?或者是否有不同的数据类型/操作数可以让我实现这一目标?

任何帮助表示赞赏。

0 投票
2 回答
235 浏览

forth - 从单词或变量附加字符串时出错

我正在尝试在 gforth 中附加两个字符串,但我收到了一些看起来很吓人的错误消息。

虽然s" foo" s" bar" append type cr工作正常,但一旦我开始将字符串存储在变量中或从单词中创建它们,就会出现错误。例如:

运行它会产生以下错误:

我精通C语言,所以很明显我错误地使用了Forth !我想我需要学习一些关于 Forth 内存管理的基本知识。

谁能解释一下这里出了什么问题,我应该怎么做?

当我尝试附加存储在变量中的字符串时,我也遇到了问题:

这以我必须打破的循环结束:

作为参考,我在 Mac OS X 上使用 gforth 0.7.2。我将非常感谢您对正在发生的事情的一些很好的解释。

更新

我可以看到的定义append

那么,似乎我需要自己在 Forth 中管理内存?如果是这样,怎么做?

解决方案

Andreas Bombe 提供了以下线索。最终可行的程序是

输出是

0 投票
1 回答
485 浏览

serial-port - 使用 Gforth 更改串行端口设置

我正在尝试与串行端口(打开的 Arduino 设备/dev/ttyUSB0)通信。我遇到了麻烦,因为要正确读取/写入数据,我需要设置各种参数,例如速度和奇偶校验。

是否有一个 Gforth 库已经这样做了?

我发现这个链接通过并调用 C 函数来直接设置 termios 参数 - http://www.forth.org/svfig/kk/TestSerial.f.txt,但我更喜欢使用 Gforth 附带的东西本身。