【发布时间】:2013-01-14 21:00:22
【问题描述】:
(define (subtract-1 n)
(string-append "Number is: " (number->string n))
(cond
[(= n 0) "All done!"]
[else (subtract-1(- n 1))]))
我不断收到错误消息:define: 只期望函数体有一个表达式,但发现了 1 个额外的部分。我不明白为什么会这样。
自我说明:使用 DrRacket 时,将语言设置为 BSL 可能会导致 Racket 命令在编译时出错。
【问题讨论】:
-
(string-append...)和(cond...)都在函数体中。 -
@dotnetN00b:是的,BSL 是 Racket 的一种受限形式,其中函数的主体中只能有一个表达式。该限制旨在帮助将副作用与值混淆的初学者:它迫使您在没有副作用的情况下编写。如果你想要副作用,你需要在 BSL 之外。顺便说一句,在上面的代码中,似乎存在混淆:看起来你想打印一个小日志消息,但代码实际上是计算一个日志消息这不会被看到。
标签: scheme racket racket-student-languages