标签: forth

为什么我在 Gforth 中得不到浮点答案?

听说只要在运算符前面加一个F,然后在最后加一个(.),就可以计算出浮点数,然后显示出来。但它给了我这个答案:

2 3 F/ .       
:8: Floating-point stack underflow
2 3 >>>F/<<< .
Backtrace:
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到0.66666667 ok

forth gforth

3
推荐指数
1
解决办法
550
查看次数

如何使用 GDB 调试 jonesforth?

jonesforth 通常按如下方式启动:

cat jonesforth.f  - | ./jonesforth
Run Code Online (Sandbox Code Playgroud)

有什么好的调试方法吗jonesforth

assembly gdb gnu-assembler forth

3
推荐指数
1
解决办法
503
查看次数

是否有用于堆栈效果的 Forth 静态分析器?

我正在因导致堆栈溢出的编程错误而失去生产力。

例如,如果我drop在一个IF ELSE THEN分支中、一个循环中省略 a并且出现堆栈溢出,我通常必须重新启动我的开发环境。我在iCEstick上使用SwapForth

是否存在预测编译字堆栈结果的静态分析器?

像检查代码是否始终与 ( nnn nnn -- f ) 文档匹配的自动化工具?

forth

3
推荐指数
1
解决办法
222
查看次数

为什么 Forth 为每个变量保留两个单元格?

在试图找出 Forth 如何管理字典(以及一般内存)时,我遇到了这个页面。熟悉 C 语言后,我对指针的概念没有任何问题,并且我认为我对所有内容的理解都是正确的。然而,在页面的最后有几个练习,在这里我注意到一些奇怪的事情。

练习9.4,假设DATE已被定义为a VARIABLE,询问之间的区别是什么

DATE .
Run Code Online (Sandbox Code Playgroud)

' DATE .
Run Code Online (Sandbox Code Playgroud)

练习9.5使用用户变量执行相同的操作BASE

根据提供的答案,两个短语将给出相同的结果(也带有BASE)。然而,使用Win32Forth尝试此操作,得到的结果相差 4 个字节(1 个单元格)。这是我所做的:

here . 4494668  ok
variable x  ok
x . 4494672  ok
' x . 4494668  ok
Run Code Online (Sandbox Code Playgroud)

创建另一个变量会产生类似的结果:

variable y  ok
y . 4494680  ok
' y . 4494676  ok
Run Code Online (Sandbox Code Playgroud)

因此,看起来每个变量不仅仅是一个单元格(用于值),而是两个单元格。变量本身指向实际值的存储位置,并检索执行令牌处的内容(使用' x ?)给出0040101F这两个变量。

对于练习 9.5,我的结果是:

base . 195F90  ok
' base …
Run Code Online (Sandbox Code Playgroud)

forth win32forth

3
推荐指数
1
解决办法
463
查看次数

如何使用Forth发送GET / POST请求

我想为我的Raspberry Pi编写一个Forth程序。该程序应从现有文件中读取一些传感器数据,并将其发送到存储数据的网站。

在网上搜索大量关于Forth的便捷程度以及如何计算斐波纳契数的文档。但是我该如何请求URL?如何将数据发送到网站并处理结果?

如果没有套接字支持:是否可以启动外部程序(例如curl / wget)来执行请求?

sockets forth raspberry-pi

3
推荐指数
1
解决办法
417
查看次数

这个旧程序写的是什么语言?

"嗨,你能不能为我改写一些东西",我的老板说,"一些遗留代码".是的,遗留代码写在早期中生代的某处.

我还剩30个小时,我还是不知道,这是什么样的语法!VHLD?VBA?程序是专门做的事情与音频文件,并专门为DOS下运行.

你能给我一个暗示这是什么意思吗?怎么编译呢?

代码段:

enter \ Load - main screen
empty  forth definitions  decimal
application  warning on

: TITLE ." KCS version 0.8  28-Jan-06" cr ;

cr .( Compiling: )  title  2 load

 cr .( Save to disk? )  y/n
[if]
\  pad reserve @ + 256 + limit s0 @ - + set-limit
  turnkey program  KCS
[then]



\ Load - defaults
 variable RESERVE  0 reserve !       \ reserved memory tally
 defer ?BREAK  ' noop is ?break      \ …
Run Code Online (Sandbox Code Playgroud)

programming-languages dos forth

3
推荐指数
1
解决办法
178
查看次数

构建 Jonesforth - asm/unistd.h:没有这样的文件或目录

当尝试在 Ubuntu 16.04.4 64 位(Xenial Xerus)上构建Jonesforth (32 位 GNU 汇编程序)时,我看到以下内容:

~/src/jonesforth $ make
gcc -m32 -nostdlib -static -o jonesforth jonesforth.S
jonesforth.S:1154:24: fatal error: asm/unistd.h: No such file or directory
compilation terminated.
Makefile:11: recipe for target 'jonesforth' failed
Run Code Online (Sandbox Code Playgroud)

查看文件jonesforth.S,我注意到以下几行:

//#include <asm-i386/unistd.h>  // You might need this instead
#include <asm/unistd.h>
Run Code Online (Sandbox Code Playgroud)

我尝试过使用asm-i386/unistd.h它,但这似乎也没有帮助。

最好的做法是通过安装更多标头sudo apt install linux-headers...吗?如果是这样,我应该选择哪个?应该linux-headers-generic够了吧?

jonesforth.S或者,我应该更改所指的标题吗?

ubuntu assembly gcc gnu-assembler forth

3
推荐指数
1
解决办法
9521
查看次数

使用循环反转数据堆栈

我正在尝试使用两个循环反转堆栈,第一个循环将数据堆栈中的项目发送到返回堆栈。另一个将它们从返回堆栈转移到数据堆栈。不幸的是,它不起作用& 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)

forth gforth

3
推荐指数
1
解决办法
388
查看次数

Forth 值与变量有何不同?

阅读 Gforth 手册,可以使用单词 来更改值TO,那么它与变量有何不同?

https://gforth.org/manual/Values.html

forth

3
推荐指数
1
解决办法
268
查看次数

检查Forth中的素数

如何检查Forth的素数

这是我现在使用的,但是随着数字的增加它会变慢:

: prime ( n - f )
  DUP 2 < IF 
    DROP 0 EXIT
  THEN
  DUP 2 ?DO
    DUP I I * < IF
      DROP -1 LEAVE
    THEN
    DUP I MOD 0= IF
      DROP 0 LEAVE
    THEN
  LOOP ;
Run Code Online (Sandbox Code Playgroud)

primes forth gforth

2
推荐指数
1
解决办法
334
查看次数