#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. И условное выражение-это выражение, а не утверждение.