问题标签 [r6rs]
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.
scheme - Chez Scheme:顶层的宏导入
我正在运行 Chez Scheme 9.5 并尝试在库中定义语法转换器。这是一个例子:
我将其保存在一个文件中forlib.ss
并chez
从同一目录运行。然后在 REPL 中,我得到了这个:
如果我将语法定义更改为
(没有in
关键字),一切正常:
回到带有in
关键字的旧定义。如果我将测试代码放入测试文件中:
并尝试执行该文件,结果取决于我如何执行该文件。如果我使用 运行这个程序chez --program
,它会按预期工作:
如果我使用 运行它chez --script
,我会得到与上面相同的错误:
这提出了两个问题:
- 为什么 REPL
--script
可以很好地导入没有特殊关键字的语法形式,但拒绝接受其中包含特殊关键字的语法形式? --script
和 和到底有什么区别--program
?用户手册说这--program
意味着文件内容被解释为 rnrs 顶级程序,但对语义是什么保持沉默--script
。
最后,为了彻底解决我的困惑,如果我直接在 REPL 中输入上述语法定义,那么一切都按预期工作:
那么从库中导入的语法转换器和直接在 REPL 中定义的语法转换器在 REPL 中有何不同?
c - Scheme 到 C 的翻译器
我尝试从方案函数开始生成 C 代码,但我找不到从方案到 C 的任何翻译器。我试图将此函数转换为 C。
我尝试使用gambit (gsc) 并生成一个 C 文件,该文件看起来只是要加载到某些解释器中的文件,而不是包含main
可以执行的函数的文件。
是否有一些应用程序可以生成可以直接执行的 C 代码?标准方案库中的函数display
应该与某个目标文件链接。
编辑:
我的目的是了解专业翻译人员使用的算法。
include - include vs. load in mit-scheme
What is the difference between (include path)
and (load path)
in mit-scheme
?
I grep the source code of mit-scheme and I see a few uses of include
and I found the definition of load
in the reference documentation, but I cannot find the semantics.
I also found the include-ci
-- I have never used it. How is it different of the others ?
Personally, I used (include FILE)
lots of times, but thinking of it as having the same semantics as #include
of the language of the preprocessor and it worked so.
For me it is not clear the level at which these are interpreted. Is include
executed at the level of reader/syntax desugaring/runtime ?
Can someone clarify me the meaning of these, please ?
scheme - 在过程调用中强制从左到右的评估顺序
在某些情况下,调用具有保证从左到右评估顺序的过程很有用。例如,当使用从端口读取的数据调用记录构造函数时,顺序很重要。通常这些字段的顺序与文件中的顺序相同,因此不需要重新洗牌。因此,通常的引入名称和排序方式的方法let*
有点繁琐。
提供此功能的标准库中是否有一些现成的语法?基本上,(f a b c)
我希望写一些类似的东西,而不是(ordered f a b c)
,它被翻译成
t0
与新符号t3
。
scheme - 左移到 fixnum 符号位
我正在寻找一种方法将一点从正的固定数字转移到符号位置。基本上,我想要的是一种可预测的(不是未定义的)方式来执行 fixnum 左移而无需溢出检查。
一个低效的实现如下所示:
理想情况下,这将编译为单个 CPU 指令(至少对于恒定移位;CPU 在处理移位与寄存器一样宽或更宽的方式上有所不同)。
file - 是否可以在 Scheme R6RS 中有效地从磁盘加载整个文件?
以下get_file
函数从磁盘读取文件作为 Scheme R6RS 字符串:
它的工作原理是打开文件,尾调用递归地逐个字符读取链表,直到我们找到 eof,关闭文件,然后反转链表(因为尾调用)并将其转换为字符串.
与 Node.js 相比,这个过程应该很慢readFile
,因为它逐个字符地读取字符,并为文件中的每个字符分配一个包含一个单元格的链表。理想情况下,我们应该能够将文件作为字符串缓冲区读取,而无需动态内存分配。
有没有办法get_file
使用 R6RS 中可用的原语进行优化?
scheme - 为什么 Scheme `filter` 表单不能“按顺序”处理列表元素?
(filter procedure list)
适用procedure
于的每个元素list
并返回一个新列表,该列表仅包含procedure
返回 true 的元素。
(R. Kent Dybvig The Scheme 编程语言)(在线)
从这个描述中可能不明显的是,虽然返回列表中的元素以与 中相同的顺序出现,但R6RS 中没有指定list
调用的顺序。procedure
(然而,Racket 将程序“从第一个到最后一个”应用于每个元素)
最近一个活跃的答案
提到它需要一个filterfunc
which 在其参数列表
中按顺序工作。应该如何编写这个函数?
提供了我对该问题的解释的答案。