Scheme 查询方案/球拍-';如果';条款

Scheme 查询方案/球拍-';如果';条款,scheme,if-statement,racket,Scheme,If Statement,Racket,目前正在学习Scheme/Racket,运行此代码时遇到问题 (if (or (< aftnHour 0) (> aftnHour 6)) ((display "You entered an invalid input. Please enter an input between 0 and 8 only.") (newline)(newline)(askAftnHour)) (如果(或(aftnHour 6)) ((显示) “您输入的输入无效。请仅输入0到

目前正在学习Scheme/Racket,运行此代码时遇到问题

(if (or (< aftnHour 0) (> aftnHour 6))
  ((display 
      "You entered an invalid input. Please enter an input between 0 and 8 only.")
   (newline)(newline)(askAftnHour))
(如果(或(aftnHour 6))
((显示)
“您输入的输入无效。请仅输入0到8之间的输入。”)
(新行)(新行)(askAftnHour))
我的目标是检查变量是否不在0和6之间。如果满足该条件,我想提示用户他的错误,并再次调用相同的方法。
换行符
仅用于格式化目的

当用户第一次输入错误时,该代码实际上起作用,即显示错误消息,然后再次调用该函数。但现在,在输入正确的输入时,会产生错误:

“过程应用程序:预期的过程,给定:#;参数为:###”


我怀疑我的
新行有问题,但真的不知道是什么问题。非常感谢您的帮助/建议。

您在显示前错过了一个begin调用。仅用()把它们当作一个序列,它们实际上会被当作一个函数调用,在这个例子中,它是一个有三个void参数的void调用

> (if (or(< aftnHour 0)(> aftnHour 6))
>     (begin (display "You entered an invalid input. Please enter an input between 0
> and 8 only.
> ")(newline)(newline)(askAftnHour))
>(如果(或(aftnHour 6))
>(开始)(显示“您输入的输入无效。请输入介于0和0之间的输入
>只有8个。
>(新行)(新行)(askAftnHour))