使用大写和小写Scheme符​​号,需要澄清

时间:2013-01-09 20:41:21

标签: scheme

为什么在请求Scheme用混合大小写解释符号值时,只返回小写版本?

#;> 'HelloWorld
helloworld

#;> 'helloworld
helloworld

对于上面的示例,我正在使用sisc

3 个答案:

答案 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系统都区分大小写,并且将完全按照输入的方式实施符号。