1

刚开始学习Scheme。我使用 Dr. Racket 作为我的编译器/解释器。

我需要一些字符串函数(确切地说是字符串替换),所以我从SRFI 13复制。

当我测试它时,它显示..

reference to undefined identifier: let-string-start+end

这是用

define-syntax let-string-start+end

好像被忽略了?究竟发生了什么?

4

1 回答 1

8

您不需要从 SRFI 13 手动复制和粘贴项目:它内置在 Racket 中。事实上,大多数主要的 SRFI 库都与 Racket 捆绑在一起:http: //docs.racket-lang.org/srfi/index.html

如果您在 Racket 中使用r5rs语言,则可以使用以下行引入 SRFI 13:

(#%require srfi/13)

看起来很奇怪的#%require是一个特定于 Racket 的钩子,它允许 r5rs 程序从 Racket 加载库模块。

所以 Racket 中的 r5rs 程序是这样的:

(#%require srfi/13)
(display (string-replace "foo world" "hello" 0 3))
(newline)

如果您不使用基本r5rs语言,而是使用成熟的语言,那么#lang racket导入 SRFI 13 看起来会很相似。这是一个小程序#lang racket,它与之前的程序相同:

#lang racket
(require srfi/13)
(string-replace "foo world" "hello" 0 3)

不幸的是,您报告的错误没有足够的信息来准确诊断问题。我怀疑某处的复制和粘贴不完整,因为您提到您从 SRFI 13 复制。我认为您可能错误复制代码的一个原因是您提到定义它:

define-syntax let-string-start+end

那行实际上缺少一些关键的括号;在原始来源中,该行的前面有一个前导括号。

但是您不应该尝试手动从 SRFI 实现中剔除零碎,至少在您更熟悉 Scheme 之前不要这样做。通过加载整个库来简化。

于 2012-02-26T04:09:53.870 回答