scheme - 如何解决此错误 "reference to an identifier before its definition: with"

标签 scheme racket plai

我正在学习《编程语言:应用与解释》,执行#lang plai后可以在DrRacket 5.2.1中运行前两章的示例。但是当我输入第三章的第一个示例时,如下所示:

(with (x 5) (+ x x))

我收到以下错误:

reference to an identifier before its definition: with

我在这本书里没有找到with的定义。我需要图书馆吗?

最佳答案

with 构造不是您在自己的程序中使用的东西 - 它是存在于您定义的语言中的东西。换句话说,它是您实现的东西,而不是您使用的东西。请注意,书籍总是将其与大括号一起使用,{with {x ...} ...},这是为了避免您遇到的这种确切的困惑 - 大括号始终是在您实现的语言的代码中使用,圆括号用于您自己的实现的代码。

请注意,在 Racket 中定义您自己的 with 很简单,但这是错误的,并且可能会让您更加困惑。您不应该尝试在 Racket 中使用它,而应该按照本书的内容进行操作,在第 3 章末尾,您将拥有一个可工作的 WAE 语言解释器,然后您将能够使用它来运行 WAE 程序,使用 with

顺便说一句,如果您正在寻找与 with 类似的 Racket 形式,请查看 let ——唯一的区别是 let 允许您指定多个绑定(bind),而不仅仅是一个。

关于scheme - 如何解决此错误 "reference to an identifier before its definition: with",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11412546/

相关文章:

functional-programming - 用于查找给定函数的列表的最小元素的 Racket 函数

scheme - 类型的空列表不起作用的缺点

functional-programming - 函数式编程的入门教材是什么?

functional-programming - 什么时候可以修改函数式语言中的变量?

programming-languages - Scheme 中 Curried 函数的实现

racket - 如何在Typed Racket中定义Union多态数据结构的实例?

networking - 为什么我在 Racket 上的网络服务器不会多次接收数据?

functional-programming - 如何从列表中删除给定的符号?

scheme - 如何使用 DrRacket 5.2.1 在 Emacs 中编辑和运行 PLAI 代码