包括racket/scheme中的文件

包括racket/scheme中的文件,scheme,racket,Scheme,Racket,我正在尝试使用drracket完成“如何做”中的练习 设计方案第二版” 这篇文章中的许多练习都是在前一篇文章的答案的基础上进行的 问题,所以我想包括 回答问题,这样我就不必复制和粘贴身体 每次都是旧答案的一部分 我的主要问题是:我如何做到这一点 我查阅了文档,发现了一个名为 include这似乎是我想要的,但我不知道如何使用它 这是正确的 我有两个文件: test.rkt-此函数编译和运行良好,包含一个函数: (define (test) 1) (test) newtest.rkt-我希望此文

我正在尝试使用drracket完成“如何做”中的练习 设计方案第二版”

这篇文章中的许多练习都是在前一篇文章的答案的基础上进行的 问题,所以我想包括 回答问题,这样我就不必复制和粘贴身体 每次都是旧答案的一部分

我的主要问题是:我如何做到这一点

我查阅了文档,发现了一个名为
include
这似乎是我想要的,但我不知道如何使用它 这是正确的

我有两个文件:

test.rkt-此函数编译和运行良好,包含一个函数:

(define (test) 1)
(test)
newtest.rkt-我希望此文件能够使用test.rkt中定义的函数

(require racket/include)
(include "test.rkt")

(define (newtest)  (* test 2))
当我尝试编译此文件时,会出现以下错误:

module: this function is not defined
(信息不是很丰富,但我只得到了这些信息…)

如何在不出现此错误的情况下获取要包含的第一个文件?是
包括

即使是正确的函数,还是我的方法完全错误?

include表单不起作用,因为当语言设置为“初学者”或其他教学语言时,DrRacket实际上会将您的程序包装在一个模块中。如果在常规文本编辑器中打开
“test.rkt”
,可以看到这一点。
#reader….
位是生成模块的部分。但是当它被包含到另一个文件中时,它就没有意义了。因此,错误会抱怨
模块

不幸的是,据我所知,HtDP语言仍然没有
提供
,这正是使这项工作正常运行所需要的

如果你真的想让它工作,这里有一个方法可以绕过它:

在与其他文件相同的目录中创建一个名为“
”提供.rkt“
的新文件。编辑此文件(仅此文件)时,请将DrRacket中的语言设置为“从源代码确定语言”。将以下两行放在
“provide.rkt”
中:

(它声明了一个使用完整Racket语言的模块,该语言只提供内置的特殊形式
provide

将以下行添加到
“test.rkt”
程序中。(请确保DrRacket的语言设置回“初学者”或您为此使用的任何教学语言。)

现在,
“test.rkt”
是一个导出
测试功能的模块。(它一直是一个模块,只是以前没有任何导出,所以它不是很有用。)

将以下行添加到
“newtest.rkt”
程序中:

(require "test.rkt")

这将导入由
“test.rkt”
提供的所有内容:目前只需
测试
,但您可以添加其他内容,您只需
提供
即可。

谢谢-我将尝试一下。所以我必须“提供”所有功能才能使用它们?我是否最好将语言设置为scheme而不是其中一种教学语言?不,您只需要提供希望其他文件(即其他模块)可见的功能。不,坚持教学语言可能是值得的。首先,测试框架(包括覆盖率检查)很有用。谢谢!(最少15个字符的注释…@ryanculpaper是否可以提供文件中定义的所有内容,而不必为所有内容编写
provide
?谢谢:)@damonh,您可以将
所有已定义的
添加到
“provide.rkt”
中,然后在文件中使用
(provide(all defined out))
(require "provide.rkt")
(provide test)
(require "test.rkt")