dot*_*00b 1 scheme racket racket-student-languages
(define (subtract-1 n)
(string-append "Number is: " (number->string n))
(cond
[(= n 0) "All done!"]
[else (subtract-1(- n 1))]))
Run Code Online (Sandbox Code Playgroud)
我不断收到错误消息:define:对于函数体,只期望一个表达式,但是发现了1个多余的部分。我不明白为什么要得到这个。
对自己的提示:使用DrRacket时,将语言设置为BSL可能会使Racket命令在编译时出错。
您正在使用的语言(BSL)仅在过程主体内允许一个表达式,如果存在多个表达式,则需要将它们打包在begin。
还要注意,该string-append行什么也不做,您应该打印或堆积它。以下是我建议的可能解决方案:
(define (subtract-1 n)
(begin
(display (string-append "Number is: " (number->string n) "\n"))
(cond
[(= n 0) "All done!"]
[else (subtract-1 (- n 1))])))
Run Code Online (Sandbox Code Playgroud)
更好的是,printf为了简单起见,请使用以下过程:
(define (subtract-1 n)
(begin
(printf "~a ~s~n" "Number is:" n)
(cond
[(= n 0) "All done!"]
[else (subtract-1 (- n 1))])))
Run Code Online (Sandbox Code Playgroud)
两种方式的示例执行都如下所示:
(subtract-1 3)
=> Number is: 3
=> Number is: 2
=> Number is: 1
=> Number is: 0
=> "All done!"
Run Code Online (Sandbox Code Playgroud)