如何检查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) 为什么这段代码不起作用?
TIB 10 ACCEPT
TIB SP@ 1 cells - 10 cmove
Run Code Online (Sandbox Code Playgroud)
在该代码中,我尝试输入一个字符串并将其存储在终端输入缓冲区中,然后将其存储在参数堆栈中.
但是.SI看到这不起作用.
开始 FORTH 的第 3 章说,
现在您已经创建了一个“当前”块,您可以通过简单地输入单词来列出它
L。与 不同LIST,L不希望按块号进行处理;相反,它列出了当前块。
当我跑步时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)
我究竟做错了什么?
INCLUDE显然是文件IO。但我很困惑它如何与LOAD. INCLUDE没有 a会做什么LOAD?从书中,
INCLUDE xxx ( -- )
加载文本文件xxx(编译或执行)。
LOAD ( n -- )
加载磁盘块(编译或执行)。
如何测量我的程序的执行时间?我发现了这个,但它对我不起作用,因为我的程序需要堆栈中的一些数字才能工作,所以我的程序和这个解决方案相互干扰(据我所知,因为当我尝试time: myfunc或time: num1 num2 myfunc没有任何效果时......)
: time: ( "word" -- )
utime 2>R ' EXECUTE
utime 2R> D-
<# # # # # # # [CHAR] . HOLD #S #> TYPE ." seconds" ;
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
如果我们使用 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)
按任意键后它会中止(好吧,因为 …
假设我已经s" Hello"存储在某个地方。而且我还定义了: Hello something ;. 有没有办法像执行单词一样执行字符串?
我已阅读文档,但找不到任何相关功能。这可能很明显,但可惜我无法解决。
你有一个单词USE,它将创建一个文件.
USE xxx ( -- )
将OS文本文件xxx指定为"Forth disk".
但是,目前尚不清楚如何在交互式会话中写入该FORTH磁盘.有动词如FLUSH和,UPDATE但他们都没有看到做任何事情.我正在使用gforth.我在会话中创建单词并使用它们.我不明白FORTH磁盘在这种情况下是如何工作的.它听起来像R save.image(),除了我无法得到任何东西来保存.你能提供一系列命令,导致某些东西被写入参数USE吗?