我正在学习《编程语言:应用与解释》,执行#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/