根据 scheme.org 实现 GNU Guile 支持 Scheme 的 R6 和 R7 版本。 guile 可执行文件的命令行参数为“--r6rs”和“--r7rs”。 Guile 网站 说
由于 R7RS 的标准远不如 R6RS 雄心勃勃(请参阅 Guile 和Scheme),Guile很容易支持。 因此,Guile 是一个 完全符合 R7RS 的实现,除了 偶尔出现错误和一些未实现的功能:
- R7RS 指定了使用以下方式读取循环数据结构的语法: 数据标签,例如#0=(1 2 3 . #0#)。 Guile的读者不这么认为 目前支持该语法; https://bugs.gnu.org/38236.
- 与 R6RS、R7RS的一些词汇特征与Guile的冲突 历史语法。除了 r6rs-hex-escapes 和 eager-eol-escapes(请参阅与 R6RS 的不兼容性), r7rs-symbols 阅读器功能需要显式启用。
scheme.org 上的索引显示 向量->字符串是 R7RS 小的一部分。但是,当我使用 --r7rs 选项运行 Guile 时,它无法识别向量->字符串。
“未绑定变量:向量->字符串”
相同的代码适用于 MIT/GNU 方案
(display (vector->string #(#\H #\i #\!))) ; => "Hi!"
他们的缺席似乎确实是 R7RS 支持方面的疏忽,是的。考虑提交有关它的错误报告吗?
与此同时,这里有 Guile 的
string->vector
和 vector->string
版本。
(use-modules (srfi srfi-43))
(define* (string->vector s #:optional (start 0) (end (string-length s)))
(vector-unfold
(lambda (i) (string-ref s (+ start i))) (- end start)))
(define* (vector->string v #:optional (start 0) (end (vector-length v)))
(string-tabulate (lambda (i) (vector-ref v (+ start i))) (- end start)))