我想以非零退出状态退出 Forth 程序(使用 Gforth 0.7.3)。
我试过了:
1 bye
Run Code Online (Sandbox Code Playgroud)
但 1 不会被解释为 的参数bye(而且我也没想到这会起作用;我在文档中找不到任何bye接受参数的提示)。
请注意,我不想触发异常,因为这也会打印错误消息(除非有办法从 Forth 程序本身中抑制异常的错误消息)。
那么,如何将 Forth 程序退出回托管环境/操作系统并提供非零退出状态?(基本上,我正在寻找return EXIT_FAILURE; // from main()(C) 或exit(EXIT_FAILURE);(C) 或System.exit(1);(Java) 的等效项。)
这家公司有一个有趣的CPU,以惊人的速度运行.是否有可能模拟C或内存太小?
当我尝试编译Gforth 0.7.0时,我收到以下错误:
$ ./configure
$ make
#compiling…
Undefined symbols:
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[3]: *** [gforth-ll] Error 1
./preforth -p ".:~+:." -e 's" mach16b.fs"' ./kernel/main.fs -e "save-cross kernl16b.fi- /usr/local/bin/gforth-0.7.0 bye"
You need to configure with a gforth in $PATH to build this part
make[3]: *** [kernl16b.fi-] Error 1
make[2]: *** [gforth-ll] Error 2
make[1]: *** [optgforth] Error 2
make: *** [gforth] Error 2
[22:16:01] gforth-0.7.0$
Run Code Online (Sandbox Code Playgroud)
通过端口安装时出现同样的错误.我想问题是Gforth是写的,至少部分是在Forth中,所以如何在没有先安装它的情况下安装它(或者是其他问题)?
我使用的是Mac OS …
该Gforth文件说,通过调用访问论点next-arg,但这种省略的程序名,这将在一个类似C语言进行打印.
因为argv[0]似乎是自动从Forth中的参数向量中删除,是否有一个我可以调用它返回它的特殊函数?
有没有办法通过Forth中的索引访问堆栈的元素,而不会弹出它上面的所有元素?
例如,如果我将数字1到1000推入堆栈,我如何获得第500个元素?
当进入'a'Gforth时,字符的ASCII编号(通过使用key单词并按下将被放入堆栈的相同数字a)放入堆栈.
例如,这不适用于' '(空格).代替:
' ' ok
.s <1> 34384939008 ok
Run Code Online (Sandbox Code Playgroud)
数字"应该"为32.这个行为有什么解释?除了手动将对应于' '(空间)的ASCII数字放在堆栈上之外,可以做些什么 ?
当我阅读Stephen Pelc的"Programming Forth"时,文本似乎暗示词汇表和单词列表可能是不同的东西.我认为字典词条有一个名字字段,代码字段等,所以有单独的单词列表对我没有意义.
单词列表只是一种谈论Forth单词的名称字段的方式,还是单词列表与字典条目分开的实际数据结构?(与主流语言相比,第四语言资源有点稀缺)
我曾经用来CREATE创建一个字符串数组:
create mystringarray s" This" , s" is" , s" a", s" list" ,
Run Code Online (Sandbox Code Playgroud)
我想按升序排序.我在线发现了汇编语言的一些教程,但我想在Forth中完成.什么是最佳实践方法?
Forth 编程语言使用堆栈在函数之间传递参数。不是给子函数一个数字作为直接信息,而是首先将值放入数据堆栈,另一个函数从堆栈中获取值。
Forth 的一个特殊功能是处理不同堆栈上的整数值和浮点值。这意味着,不可能将浮点值推送到数据堆栈。在 Forth 中编写短程序时,经常需要调试代码行。
这可以通过打印堆栈的内容来实现。如果开发人员看到现在堆栈上的内容,他/她很容易理解代码有什么问题。打印出堆栈的内容对于错误跟踪很重要。
将两个数字压入普通数据栈后,就可以显示其内容了。在示例中,输入“.s”命令后,两个整数都被打印出来。但是,如果我将两个浮点数推入专用浮点堆栈,则只显示最后一个元素。如何使整个浮点堆栈可见?
gforth example.fs
1 2 .s cr \ <2> 1 2
1.0e 2.0e f. cr \ 2.
bye
Run Code Online (Sandbox Code Playgroud) 目的是在字典中创建一个Forth单词,然后打印出该单词的内存内容。第一步很容易。这个: main词的创建方法与教程中所述相同。创建单词后,字典指针将移至下一个位置,因此我必须从中减去一些项目,现在可以转储创建单词的内存区域了:
\ create a dummy routine
: main 1 dup + . ;
\ put dictionary pointer to the stack
\ and subtract 50 indizies
dp 50 -
\ print out 20 cells to the screen from dp-50 until dp+50
\ but where is my newly created routine ": main"?
100 dump
bye
------
gforth "a.fs"
7F81DF443FC6: 00 00 20 17 12 AF 60 55 - 00 00 04 00 00 00 00 00 .. ...`U........
7F81DF443FD6: …Run Code Online (Sandbox Code Playgroud)