刚开始学习Scheme。我使用 Dr. Racket 作为我的编译器/解释器。
我需要一些字符串函数(确切地说是字符串替换),所以我从SRFI 13复制。
当我测试它时,它显示..
reference to undefined identifier: let-string-start+end
这是用
define-syntax let-string-start+end
好像被忽略了?究竟发生了什么?
刚开始学习Scheme。我使用 Dr. Racket 作为我的编译器/解释器。
我需要一些字符串函数(确切地说是字符串替换),所以我从SRFI 13复制。
当我测试它时,它显示..
reference to undefined identifier: let-string-start+end
这是用
define-syntax let-string-start+end
好像被忽略了?究竟发生了什么?
您不需要从 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 之前不要这样做。通过加载整个库来简化。