问题标签 [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.
forth - 我在哪里可以找到 Forth / Gforth API?
几天前,我从《Starting Forth》一书开始学习 Forth。在编写了我的第一个程序后,我想知道是否有类似Java API或所有已实现方法的综合手册。
你能推荐我一个 Forth / Gforth API 吗?
definition - 如何在 Forth 定义中创建单词
我正在使用Gforth,我想在定义中创建一个词。在 Gforth 的 cmd 行中,我可以输入:
或者更具体地说,我定义了一个数组函数,它期望堆栈上的大小并创建一个带有该数组地址的单词:
因此,如果我输入10 array foo
,我可以稍后使用foo
。
但是如果我10 array foo
在另一个定义中写它会给我一个编译错误。我试过用s" foo"
which compiles 替换 foo ,但它在运行时会爆炸,说:
尝试使用零长度字符串作为名称
有没有办法做到这一点?
forth - 在 Forth 中实现求幂
我正在使用Gforth来尝试实现求幂。从理论上讲,我了解基于堆栈的语言应该如何运行。但是,我在 Gforth 上实现它时遇到了困难。
这是我现在拥有的:
但是,当我运行它时,我看到一个堆栈下溢,如:
Gforth 的循环结构是否在循环时操纵堆栈?
我对 Forth 的工作原理一无所知,因为我在网上看到的大多数循环示例都相当复杂,而且对于 Forth 的新手来说很困惑。
我的实施有什么问题?
forth - Gforth 转换为双打的违规行为
我对Forth 中的s>d
and函数如何工作感到相当困惑。d>s
从我读过的内容来看,打字16.0
会放在160 0
堆栈上(因为它占用两个单元格)并且d.
会显示160
.
现在,如果我输入,我16 s>d
希望堆栈会像前面的示例一样显示出来。但是,堆栈 is和is 。160 0
d.
160
16 0
d.
16
我输入的双打不正确吗?不是s>d
像“将单格值转换为双格值那样简单吗?这种不规则性有什么原因吗?任何线索都将不胜感激。
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++ 重新安装它,还是需要采取更严厉的措施?
string - 使用 Gforth 在多个字符串连接上堆栈下溢
在Rosetta 代码中,我使用以下方法在 Forth 中连接字符串。
使用此代码,我希望能够将多个字符串连接在一起。但是,以下在 Gforth 上失败了
从我对 Forth 的基本了解中,我看到代码是将三个字符串放在堆栈上,然后将字符串附加到堆栈顶部并在其下方添加字符串,然后将新字符串再次附加到堆栈底部的字符串中。
为什么此代码在最后一个 + 位置下溢?有没有解决的办法?
string - Gforth 将字符串值存储在变量中
我正在尝试将字符串值存储到变量中。要定义变量,我使用:
我可以轻松存储整数/浮点值以x
使用
或者
为了访问它,我使用@
或f@
。现在我正在尝试存储一个字符串值:
这样做的问题是它将两个值推送到堆栈(因为它是一个计数字符串),但x !
只会将项目存储在顶部,即字符串的长度。这是危险的,因为堆栈内容可能在被x
引用时已被修改,因此地址不直接低于长度(糟糕!),因此type
会失败。所以我的问题是,有没有办法将两个值(地址和长度)存储到x
?或者是否有不同的数据类型/操作数可以让我实现这一目标?
任何帮助表示赞赏。
forth - 从单词或变量附加字符串时出错
我正在尝试在 gforth 中附加两个字符串,但我收到了一些看起来很吓人的错误消息。
虽然s" foo" s" bar" append type cr
工作正常,但一旦我开始将字符串存储在变量中或从单词中创建它们,就会出现错误。例如:
运行它会产生以下错误:
我精通C语言,所以很明显我错误地使用了Forth !我想我需要学习一些关于 Forth 内存管理的基本知识。
谁能解释一下这里出了什么问题,我应该怎么做?
当我尝试附加存储在变量中的字符串时,我也遇到了问题:
这以我必须打破的循环结束:
作为参考,我在 Mac OS X 上使用 gforth 0.7.2。我将非常感谢您对正在发生的事情的一些很好的解释。
更新
我可以看到的定义append
:
那么,似乎我需要自己在 Forth 中管理内存?如果是这样,怎么做?
解决方案
Andreas Bombe 提供了以下线索。最终可行的程序是
输出是
serial-port - 使用 Gforth 更改串行端口设置
我正在尝试与串行端口(打开的 Arduino 设备/dev/ttyUSB0
)通信。我遇到了麻烦,因为要正确读取/写入数据,我需要设置各种参数,例如速度和奇偶校验。
是否有一个 Gforth 库已经这样做了?
我发现这个链接通过并调用 C 函数来直接设置 termios 参数 - http://www.forth.org/svfig/kk/TestSerial.f.txt,但我更喜欢使用 Gforth 附带的东西本身。