2015-02-15 4 views
-1

Я хотел бы сделать тест на равенство, как этотХарактер равенства в ракетке

equal? somevar #\space

но мне кажется, что это никогда не имеет значение верно даже тогда, когда somevar=#\space.

Каков правильный путь?

+2

'(equal somevar # \ space)' должен работать отлично. SO не является игрой для угадывания, но распространенной ошибкой является сравнение строки с одним символом (например, '' '') с символом (например, '# \ space'), и это не сработает, так как' equal? ​​'Будет проверяться на '# f', если сравниваемые элементы имеют разный тип. Если вам нужна дополнительная помощь, отредактируйте свой пост с большим количеством кода. – Sylwester

ответ

2

Функционирование equal? должно работать.

> (define a #\space) 
> (define b #\space) 
> (equal? a b) 
#t 

Проблема должна быть чем-то еще.

Как вы принимаете somevar?

+0

somevar - это значение вызова этой функции (define (peek port) (строка с чтением 1 (порт ввода-вывода-порта))). Поскольку это строка, я также попробовал проверку равенства с «\\ space». – user35202

+1

Вы можете использовать 'read-char' для чтения одного символа - или в вашем случае, возможно, используйте' peek-char'. – soegaard

+1

Также строка с одним пространством просто «» – soegaard

2

Наиболее прямая процедура сравнения равенства для использования между символами будет char=?:

(define somevar #\space) 
(char=? somevar #\space) 
=> #t 

Конечно, вы всегда можете использовать equal?, но если equal? не работает, то возможно, что проблема в другом месте , Проверьте переменные, используемые в сравнении, есть хороший шанс, что они имеют другое значение или другой тип, что объясняет ошибку. В частности, убедитесь, что somevar действительно символ и не строка; например, это сравнение false:

(equal? " " #\space) 
=> #f 
+1

Да, я подозреваю, что вы правы, см. Мой комментарий выше к @soegaard. – user35202

+0

@ user35202 на самом деле, вы читаете одиночный символ _string_. Сделайте свое сравнение следующим образом: '(equal? ​​Somevar" ")' ... и он должен работать. –

Смежные вопросы