我是一名大学生,想通过“The Scheme编程语言”作为自学。
这是一个简单的程序,我将其命名为“reciprocal.ss”
(define reciprocal
(lambda (n)
(if(= n 0)
"oops!"
(/ 1 n))))
然后我想加载我的程序:
(load "reciprocal.ss")
它产生这个错误:
reciprocal.ss:1:0: #%top-interaction: unbound identifier; also, no #%app syntax transformer is bound in: #%top-interaction
我按照书上说的做了每一部分。也许我只是犯了一个菜鸟错误。任何见解将不胜感激。
最佳答案
自 load
用途 eval
,在 REPL 之外使用它通常是行不通的——原因在 Namespaces 中描述。
使用 racket/load
但是可以在这里为您工作:
loader.ss
#lang racket/load
(load "reciprocal.ss")
(display (reciprocal 10))
reciprocal.ss
(define reciprocal
(lambda (n)
(if (= n 0) "oops!"
(/ 1 n))))
在 Racket(和整个 Scheme)中,关于运行外部代码的故事比普通语言更复杂。一般来说,你应该使用
import
当你想直接“包含”一个文件时,你应该使用 provide
/require
当你想建立模块边界时,你应该使用 load
当你足够成熟,可以扩展两者的极限时。
关于scheme - 我如何在 DrRacket 加载我的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45342053/