微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在方案中获取未绑定标识符“ require”

如何解决在方案中获取未绑定标识符“ 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)))

解决方法

首先,我要注意以下几点:

  1. 通常最好使用#lang racket,因为#lang sicp非常有限。您仍然可以访问set-car!(尽管它名为set-mcar!)。请参阅https://docs.racket-lang.org/reference/mpairs.html上的文档。
  2. 如果您决定使用#lang racket,您是否真的需要使用可变数据结构?避免突变是功能编程的定义特征。并且,如果确实需要可变数据结构,是否可以将struct#:mutable一起使用?更像是球拍。请参阅https://docs.racket-lang.org/reference/define-struct.html上的文档。
  3. 这可能无法实现,但是通常我会避免使用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 举报,一经查实,本站将立刻删除。