Запрос к схеме / ракетке - предложение if - PullRequest
1 голос
/ 14 ноября 2010

В настоящее время изучаю 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))

Моя цель - проверить, не находится ли переменная между 0 и 6. Если это условие выполнено, я хочу сообщить пользователю о его ошибке и снова вызвать тот же метод. newline только для форматирования.

Код фактически работает в первый раз, когда пользователь вводит неправильно, то есть отображается сообщение об ошибке, а затем функция вызывается снова. Но теперь при вводе правильного ввода выдается ошибка:

"применение процедуры: ожидаемая процедура, задано: #; аргументы были: # # #"

Я подозреваю, что я делаю что-то не так с моим newline, но действительно не могу понять, что. Ваша помощь / совет очень ценится.

1 Ответ

3 голосов
/ 14 ноября 2010

Вы пропускаете начальный вызов перед отображением.Недостаточно обернуть некоторые выражения в () и рассматривать их как последовательность, на самом деле они будут рассматриваться как вызов функции, в данном примере это вызов 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))
...