Я хотел бы сделать тест на равенство, как этотХарактер равенства в ракетке
equal? somevar #\space
но мне кажется, что это никогда не имеет значение верно даже тогда, когда somevar=#\space
.
Каков правильный путь?
Я хотел бы сделать тест на равенство, как этотХарактер равенства в ракетке
equal? somevar #\space
но мне кажется, что это никогда не имеет значение верно даже тогда, когда somevar=#\space
.
Каков правильный путь?
Функционирование equal?
должно работать.
> (define a #\space)
> (define b #\space)
> (equal? a b)
#t
Проблема должна быть чем-то еще.
Как вы принимаете somevar
?
somevar - это значение вызова этой функции (define (peek port) (строка с чтением 1 (порт ввода-вывода-порта))). Поскольку это строка, я также попробовал проверку равенства с «\\ space». – user35202
Вы можете использовать 'read-char' для чтения одного символа - или в вашем случае, возможно, используйте' peek-char'. – soegaard
Также строка с одним пространством просто «» – soegaard
Наиболее прямая процедура сравнения равенства для использования между символами будет char=?
:
(define somevar #\space)
(char=? somevar #\space)
=> #t
Конечно, вы всегда можете использовать equal?
, но если equal?
не работает, то возможно, что проблема в другом месте , Проверьте переменные, используемые в сравнении, есть хороший шанс, что они имеют другое значение или другой тип, что объясняет ошибку. В частности, убедитесь, что somevar
действительно символ и не строка; например, это сравнение false
:
(equal? " " #\space)
=> #f
Да, я подозреваю, что вы правы, см. Мой комментарий выше к @soegaard. – user35202
@ user35202 на самом деле, вы читаете одиночный символ _string_. Сделайте свое сравнение следующим образом: '(equal? Somevar" ")' ... и он должен работать. –
'(equal somevar # \ space)' должен работать отлично. SO не является игрой для угадывания, но распространенной ошибкой является сравнение строки с одним символом (например, '' '') с символом (например, '# \ space'), и это не сработает, так как' equal? 'Будет проверяться на '# f', если сравниваемые элементы имеют разный тип. Если вам нужна дополнительная помощь, отредактируйте свой пост с большим количеством кода. – Sylwester