Условие с использованием символа в схеме

#if-statement #char #scheme #racket

Вопрос:

Я пытаюсь использовать символ в качестве условия в своем операторе if-else, но, похоже, условие может принимать только целочисленный ввод.

Это мой код:

 (display "Presenter - R nParticipant - P")

(define (option)
  (define r(read))
(cond
  ((= r R )
   (display "Presenter: nLocal - RM1272nInternational - RM1474"))
  ((= r P )
   (display "Participant: nLocal - RM795nInternational - RM800"))
))
 

Выход:

 Presenter - R 
Participant - P
> (option)
R
. . =: contract violation
  expected: number?
  given: r 
 

Комментарии:

1. = работает только для чисел. Вам нужно найти предикат, который работает для более общих типов.

2. Просто используйте equal?

3. использование equal? не работает.

Ответ №1:

Результатом вашего (read) действия является символ R, который не является ни символом, ни идентификатором.
Вы также можете использовать только = для сравнения чисел.

 > (define r (read))
R
> r
'R
> (equal? r R)
. . R: undefined;
 cannot reference an identifier before its definition
> (equal? r #R)
#f
> (equal? r 'R)
#t
 

Комментарии:

1. Затем он должен отображать цену, будь то ведущий или участник, в заявлении if-else. Ваша кодировка действительно выходит с любым отображением цены на выходе.

2. Это всего лишь иллюстрация того, что не так с вашими предположениями и что вы должны делать вместо этого. Вам нужно применить эти знания и самостоятельно завершить свой код.

3. И условное выражение-это выражение, а не утверждение.