如何在 DrRacket 加载我的文件

Wei*_*hen 5 scheme racket

我是一名本科生,想自学《TheScheme编程语言》。这是一个简单的程序,我将其命名为“reciprocal.ss”

(define reciprocal
(lambda (n)
(if(= n 0)
   "oops!"
   (/ 1 n))))
Run Code Online (Sandbox Code Playgroud)

然后我想加载我的程序:

(load "reciprocal.ss")
Run Code Online (Sandbox Code Playgroud)

它会产生以下错误:

reciprocal.ss:1:0: #%top-interaction: 未绑定标识符;另外,没有 #%app 语法转换器绑定在:#%top-interaction 中

我按照书上说的做了每个部分。也许我只是犯了一个菜鸟错误。任何见解将不胜感激。

ŹV *_*V - 4

由于load使用eval,因此在 REPL 之外使用它通常不起作用 \xe2\x80\x94 ,原因在命名空间中描述

\n\n

但是,在这里使用racket/load可以为您工作:

\n\n

加载器.ss

\n\n\n\n
#lang racket/load\n\n(load "reciprocal.ss")\n(display (reciprocal 10))\n
Run Code Online (Sandbox Code Playgroud)\n\n

倒数.ss

\n\n
(define reciprocal\n  (lambda (n)\n    (if (= n 0) "oops!"\n        (/ 1 n))))\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

在Racket(以及整个Scheme)中,关于运行外部代码的故事比普通语言更复杂。一般来说,import当您想直接“包含”一个文件时,您应该使用,当您想建立模块边界时,您应该使用provide/ ,当您足够复杂以扩展其中任何一个的限制时,您应该使用。requireload

\n