几天前我刚刚发现了 Racket,我正在尝试通过编写一个小脚本来更熟悉它,该脚本生成图像以使用#lang slideshow
.
我知道在函数范式中编程时,用 . 创建几乎所有变量是一种很好的做法let
,但我发现它引入了太多的嵌套级别,并且 Racket 的 let 有一个过于复杂的 API,需要多余的括号。我确信这是为了let
在以更强大的方式使用时消除歧义,但就我的目的而言,这只是一种烦恼。因此,我使用 , 创建所有变量define
,并在需要时使用 编写块begin
(例如在if
语句的主体中)。
问题是我一再遇到看似非常神秘的错误。我确定我只是犯了一些愚蠢的初学者错误,对语言不熟悉,但我似乎真的找不到抱怨的根源。
这是有问题的代码:
(define sub-code (foldr ht-append (rectangle 0 0) (map internal-style (rest code))))
尽管我们定义sub-code
的内容似乎无关紧要。如果我将其替换为
(define sub-code '())
我收到同样的错误。DrRacket 说的define
是在表达式上下文中使用。我理解这个错误通常意味着什么 - 当你编写类似的代码时它会引发 IE (print (define x 10))
,但我看不出是什么在这里触发它。
如果有帮助,这define
是在一个begin
块的开头,在一个if
语句中
(if (list? code)
(begin
(define sub-code '())
; a few more define statements and finally an expression ))
DrRacket 正在打印的具体错误消息是
define: not allowed in an expression context in: (define sub-code (quote ()))
我认为可能define
不允许在begin
块中,但我检查了文档,其中一个示例begin
是
(begin
(define x 10)
x)
所以我真的不知道该怎么办。提前致谢!