标签: gforth

检查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
查看次数

从终端输入缓冲区加载到参数堆栈

为什么这段代码不起作用?

TIB 10 ACCEPT
TIB SP@ 1 cells - 10 cmove
Run Code Online (Sandbox Code Playgroud)

在该代码中,我尝试输入一个字符串并将其存储在终端输入缓冲区中,然后将其存储在参数堆栈中.

但是.SI看到这不起作用.

forth gforth

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

GNU FORTH 有编辑器吗?

开始 FORTH 的第 3 章说,

现在您已经创建了一个“当前”块,您可以通过简单地输入单词来列出它L。与 不同LISTL不希望按块号进行处理;相反,它列出了当前块。

当我跑步时180 LIST,我得到

Screen 180 not modified     
0                                                                 
...                                                             
15                                                                 
 ok
Run Code Online (Sandbox Code Playgroud)

但是当我运行时L,我收到一个错误

:30: Undefined word
>>>L<<<
Backtrace:
$7F0876E99A68 throw 
$7F0876EAFDE0 no.extensions 
$7F0876E99D28 interpreter-notfound1 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

forth gforth

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

FORTH 包括与负载?

INCLUDE显然是文件IO。但我很困惑它如何与LOAD. INCLUDE没有 a会做什么LOAD?从书中,

  • INCLUDE xxx ( -- )

    加载文本文件xxx(编译或执行)。

  • LOAD ( n -- )

    加载磁盘块(编译或执行)。

io forth gforth

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

测量执行时间

如何测量我的程序的执行时间?我发现了这个,但它对我不起作用,因为我的程序需要堆栈中的一些数字才能工作,所以我的程序和这个解决方案相互干扰(据我所知,因为当我尝试time: myfunctime: num1 num2 myfunc没有任何效果时......)

: time: ( "word" -- )
  utime 2>R ' EXECUTE
  utime 2R> D-
  <# # # # # # # [CHAR] . HOLD #S #> TYPE ."  seconds" ;
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

forth gforth

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

Gforth 中的非阻塞输入

如果我们使用 ncurses 进行一个非常简单的计数器:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ncurses.h>

int main(void) {
  struct timespec start;
  clock_gettime(CLOCK_REALTIME, &start);
  initscr();
  cbreak();
  nodelay(stdscr, TRUE);
  {
    int key = -1;
    struct timespec delay, now;
    do {
      clock_gettime(CLOCK_REALTIME, &delay);
      delay.tv_sec = 0;
      delay.tv_nsec = 1000L * 1000L * 1000L - delay.tv_nsec;
      nanosleep(&delay, NULL);
      clock_gettime(CLOCK_REALTIME, &now);
      mvprintw(1, 1, "%ld\n", (long)(now.tv_sec - start.tv_sec));
      refresh();
      key = getch();
      if (key >= 0)
        break;
    } while (now.tv_sec - start.tv_sec < 60);
  }
  endwin();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

按任意键后它会中止(好吧,因为 …

time forth keyboard-events gforth

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

在 Forth 中执行一个字符或字符串,就好像它是一个单词一样

假设我已经s" Hello"存储在某个地方。而且我还定义了: Hello something ;. 有没有办法像执行单词一样执行字符串?

我已阅读文档,但找不到任何相关功能。这可能很明显,但可惜我无法解决。

forth gforth

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

写入"第四盘"

你有一个单词USE,它将创建一个文件.

  • USE xxx ( -- )

    将OS文本文件xxx指定为"Forth disk".

但是,目前尚不清楚如何在交互式会话中写入该FORTH磁盘.有动词如FLUSH和,UPDATE但他们都没有看到做任何事情.我正在使用gforth.我在会话中创建单词并使用它们.我不明白FORTH磁盘在这种情况下是如何工作的.它听起来像R save.image(),除了我无法得到任何东西来保存.你能提供一系列命令,导致某些东西被写入参数USE吗?

io forth read-eval-print-loop gforth

0
推荐指数
1
解决办法
272
查看次数