为什么在请求Scheme用混合大小写解释符号值时,只返回小写版本?
#;> 'HelloWorld
helloworld
#;> 'helloworld
helloworld
对于上面的示例,我正在使用sisc
答案 0 :(得分:2)
R5RS声明所有符号都不区分大小写,可能会更改其大小写。
请注意,某些实现会以不同的方式处理它... (eq? 'a 'A)
返回#t
并不需要(但在SISC中很常见),但如果定义函数{{}则需要它1}}您可以使用a
调用它。
答案 1 :(得分:1)
在某些Scheme解释器中,符号不区分大小写,在SISC中似乎就是这种情况。这是依赖于实现的,并且在不同的实现中并不一致。例如,这些是Racket中的不同符号:
(equal? 'HelloWorld 'helloworld)
=> #f
根据FAQ:
R5RS规定通过Scheme阅读器读取的标识符和符号(即在阅读Scheme程序时)不区分大小写,并且可能会更改其大小写。因此
(eq? 'a 'A)
与(EQ? 'a 'A)
相同并返回#t
。注意,编写依赖于此的程序被认为是不好的风格,例如通过定义函数foo
,然后使用(Foo)
或(FOO)
调用它。
答案 2 :(得分:0)
大多数版本的Scheme,就像它的母语Lisp一样,不区分大小写,所以符号可以以实现想要的任何方式实现;大多数版本的Scheme和Lisp都使用大写符号,但小写也是可能的,就像用户输入的任何情况一样。自从R6RS以来,大多数Scheme系统都区分大小写,并且将完全按照输入的方式实施符号。