如何解决在方案中获取未绑定标识符“ require”
我正在为我的项目使用Drracket。我在项目中使用语言SICP( #lang sicp )。对于我的一种实现,我需要使用名为(require (planet dyoo/simply-scheme))
的方案包。方案无法识别require关键字。但是,如果我将语言更改为 #lang球拍,则“ require”将被识别为关键字。我的项目使用了set-car!
和 set-cdr!
,这些语言以sicp语言提供,而不是球拍。有没有解决的办法。
以下是我的代码的摘录:
#lang sicp
(require (planet dyoo/simply-scheme))
(define crosscuts 0)
和
(define (move-north steps_to_move)
(set-cdr! current_position ( + (y_coord current_position) steps_to_move)))
解决方法
首先,我要注意以下几点:
- 通常最好使用
#lang racket
,因为#lang sicp
非常有限。您仍然可以访问set-car!
(尽管它名为set-mcar!
)。请参阅https://docs.racket-lang.org/reference/mpairs.html上的文档。 - 如果您决定使用
#lang racket
,您是否真的需要使用可变数据结构?避免突变是功能编程的定义特征。并且,如果确实需要可变数据结构,是否可以将struct
与#:mutable
一起使用?更像是球拍。请参阅https://docs.racket-lang.org/reference/define-struct.html上的文档。 - 这可能无法实现,但是通常我会避免使用Planet软件包。 Planet是一个旧的打包系统,不再建议使用。看来新的打包系统中没有
simply-scheme
,所以您可能真的需要在这里使用Planet。
如果您确实要使用#lang sicp
,请注意https://docs.racket-lang.org/sicp-manual/SICP_Language.html上的边距注释
R5RS没有
require
,以避免破坏使用名称require
的程序。因此,将使用#%require
。
#%require
是一个更为原始的操作。根据您的需求规格,从require
切换到#%require
可能很容易,也可能不容易。
因此,首先尝试将require
替换为#%require
,看看是否可行。如果是这样,那就太好了。
但是,如果出错,则表明#%require
无法处理您的要求规范。一种可能的解决方案是使用#%require
从Racket中获取require
,以便您可以使用require
来做更复杂的事情。
(#%require (only racket require))
(require ....)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。