【发布时间】:2013-01-09 20:41:21
【问题描述】:
为什么要求Scheme解释大小写混合的符号值时,只返回小写版本?
#;> 'HelloWorld
helloworld
#;> 'helloworld
helloworld
对于上面的例子,我使用的是sisc
【问题讨论】:
标签: scheme
为什么要求Scheme解释大小写混合的符号值时,只返回小写版本?
#;> 'HelloWorld
helloworld
#;> 'helloworld
helloworld
对于上面的例子,我使用的是sisc
【问题讨论】:
标签: scheme
R5RS 声明所有符号都不区分大小写,并且可能会更改其大小写。
请注意,某些实现对此的处理方式不同.. (eq? 'a 'A) 返回#t 不是必需的(但很常见,如在 SISC 中),但如果您定义了一个函数 a,则要求您是可以使用(A) 调用它。
【讨论】:
在某些 Scheme 解释器中,符号不区分大小写,在 SISC 中似乎就是这种情况。这是依赖于实现的,并且在不同的实现中并不一致。例如,这些是 Racket 中的不同符号:
(equal? 'HelloWorld 'helloworld)
=> #f
据此FAQ:
R5RS 声明通过 Scheme 阅读器(即在阅读 Scheme 程序时)读取的标识符和符号不区分大小写,并且可能会更改其大小写。因此
(eq? 'a 'A)与(EQ? 'a 'A)相同并返回#t。请注意,编写依赖于此的程序被认为是不好的风格,例如通过定义一个函数foo,然后使用(Foo)或(FOO)调用它。
【讨论】:
true。谢谢奥斯卡!
Scheme 的大多数版本,就像它的母语 Lisp 一样,是不区分大小写的,所以可以按照实现的任何方式来插入符号;大多数版本的 Scheme 和 Lisp 都使用大写符号,但也可以使用小写,就像用户输入的任何大小写一样。自 R6RS 以来,大多数 Scheme 系统都是区分大小写的,并且将完全按照输入的符号进行转换。
【讨论】: