我是一名本科生,想自学《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 中
我按照书上说的做了每个部分。也许我只是犯了一个菜鸟错误。任何见解将不胜感激。
由于load使用eval,因此在 REPL 之外使用它通常不起作用 \xe2\x80\x94 ,原因在命名空间中描述
但是,在这里使用racket/load可以为您工作:
加载器.ss
\n\n\n\n#lang racket/load\n\n(load "reciprocal.ss")\n(display (reciprocal 10))\nRun Code Online (Sandbox Code Playgroud)\n\n倒数.ss
\n\n(define reciprocal\n (lambda (n)\n (if (= n 0) "oops!"\n (/ 1 n))))\nRun Code Online (Sandbox Code Playgroud)\n\n在Racket(以及整个Scheme)中,关于运行外部代码的故事比普通语言更复杂。一般来说,import当您想直接“包含”一个文件时,您应该使用,当您想建立模块边界时,您应该使用provide/ ,当您足够复杂以扩展其中任何一个的限制时,您应该使用。requireload