scheme - 我如何在 DrRacket 加载我的文件

标签 scheme racket

我是一名大学生,想通过“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/

相关文章:

方案,将 lambda 作为函数参数传递 - 需要帮助理解参数

scheme - 如何在Racket中重新定义某个范围内的标准函数?

object - 在 Racket 中复制一个实例?

racket - 4294967087 作为 Racket(随机)函数的参数限制有什么意义?

macros - DrRacket 中的 While 循环宏

scheme - 通过数字列表进行过滤

loops - for/继续方案/lisp

方案 "Merge"函数实现

list - 计划列表中的重复条目

scheme - Racket 语言变更和模块问题