首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么(eq?'bitBlt (string -> symbol "bitBlt")) -> #f

为什么(eq?'bitBlt (string -> symbol "bitBlt")) -> #f
EN

Stack Overflow用户
提问于 2012-02-12 19:35:42
回答 1查看 113关注 0票数 0

R5RS 6.3.3说

代码语言:javascript
复制
(eq? 'bitBlt (string->symbol "bitBlt")) ==>  #f

这是否意味着

代码语言:javascript
复制
(eq? 'bitBlt (string->symbol (symbol->string 'bitBlt))) ==> #f?

elk返回#t!

R5RS还说

代码语言:javascript
复制
(string->symbol "mISSISSIppi") ==> the symbol with name "mISSISSIppi"

(假设这意味着‘mISSISSIppi’)

代码语言:javascript
复制
(symbol->string 'Martin) ==> "martin"

这意味着symbol->string返回标准大小写的字符串(本例中为小写)。

所以如果我扩展我的第二个例子

代码语言:javascript
复制
(symbol->string 'bitBlt) ==> "bitblt"
(string->symbol (symbol->string 'bitBlt)) ==> 'bitblt

因此

代码语言:javascript
复制
(eq? 'bitBlt (string->symbol (symbol->string 'bitBlt))) ==> #t

因为符号在R5RS中不区分大小写

代码语言:javascript
复制
(eq? 'mISSISSIppi 'mississippi) ==> #t

所以如果我扩展我原来的问题

代码语言:javascript
复制
(string->symbol "bitBlt") ==> 'bitblt

因此

代码语言:javascript
复制
(eq? 'bitBlt (string->symbol "bitBlt")) ==>  #t

对吗?但是R5Rs说#f!

我在哪里做错了?

为什么要指定此行为?

参考:

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

http://bugs.call-cc.org/browser/numbers/r4rstest.scm?rev=1线路468

实际会话示例:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-12 21:09:45

你引用的example“假设实现的标准大小写是小写的”。这意味着表达式'bitBlt实际上扩展为符号bitblt。符号实际上不是不区分大小写的;read可以标准化大小写。

string->symbol的语义与read的不同,该过程可能返回大小写混合的符号:

此过程可以在非标准情况下创建名称包含特殊字符或字母的符号,但创建此类符号通常不是一个好主意,因为在Scheme的某些实现中,它们不能作为自身读取。

在您的实现中,string->symbol似乎也标准化了大小写。检查以下命令的输出

代码语言:javascript
复制
(display 'bitBlt)
(display (string->symbol "bitBlt"))

肯定的是。

(我之前的回答是错误的。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9248457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档