Почему (eq? 'BitBlt (строка-> символ "bitBlt")) -> #f - PullRequest
0 голосов
/ 12 февраля 2012

R5RS 6.3.3 говорит

(eq? 'bitBlt (string->symbol "bitBlt")) ==>  #f

Означает ли это, что

(eq? 'bitBlt (string->symbol (symbol->string 'bitBlt))) ==> #f?

Лось возвращает #t!

R5RS также говорит

(string->symbol "mISSISSIppi") ==> the symbol with name "mISSISSIppi"

(предположительно это означает «mISSISSIppi)

и

(symbol->string 'Martin) ==> "martin"

означает, что символ-> строка возвращает строку в стандартном регистре (в этом примере строчные).

Так что, если я расширю свой второй пример

(symbol->string 'bitBlt) ==> "bitblt"
(string->symbol (symbol->string 'bitBlt)) ==> 'bitblt

и, следовательно,

(eq? 'bitBlt (string->symbol (symbol->string 'bitBlt))) ==> #t

потому что символы нечувствительны к регистру от R5RS

(eq? 'mISSISSIppi 'mississippi) ==> #t

Так что, если я расширю свой первоначальный вопрос

(string->symbol "bitBlt") ==> 'bitblt

и, следовательно,

(eq? 'bitBlt (string->symbol "bitBlt")) ==>  #t

Правильно? Но R5Rs говорит #f!

Где я здесь не так?

Почему это поведение должно быть указано?

Ref:

http://people.csail.mit.edu/jaffer/r5rs_8.html#SEC49

http://bugs.call -cc.org / browser / numbers / r4rstest.scm? Rev = 1 строка 468

Пример реального сеанса:

3> (display 'bitBlt)
bitblt
3> (display (string->symbol "bitBlt"))
bitBlt
3> (eq? 'bitBlt (string->symbol "bitBlt"))
#f
3> (eq? 'bitblt (string->symbol "bitBlt"))
#f
3> (eq? 'bitblt (string->symbol "bitblt"))
#t
3> (eq? 'bitBlt (string->symbol (symbol->string 'bitBlt)))
#t
3> (eq? 'mISSISSIppi 'mississippi)
#t

1 Ответ

1 голос
/ 12 февраля 2012

Пример , который вы цитируете, «предполагается, [s], что стандартным регистром реализации является нижний регистр».Это означает, что выражение 'bitBlt фактически расширяется до символа bitblt.Символы на самом деле не чувствительны к регистру;read может нормализовать регистр.

* Семантика 1008 * отличается от семантики read, и процедура может вернуть символ смешанного регистра:

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

В вашемреализация, string->symbol, кажется, также нормализует регистр.Проверьте вывод

(display 'bitBlt)
(display (string->symbol "bitBlt"))

, чтобы быть уверенным.

(Мой предыдущий ответ был неверным.)

...