【问题标题】:Using upper and lower case Scheme symbols, clarification needed使用大写和小写 Scheme 符号,需要说明
【发布时间】:2013-01-09 20:41:21
【问题描述】:

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

#;> 'HelloWorld
helloworld

#;> 'helloworld
helloworld

对于上面的例子,我使用的是sisc

【问题讨论】:

    标签: scheme


    【解决方案1】:

    R5RS 声明所有符号都不区分大小写,并且可能会更改其大小写。

    请注意,某些实现对此的处理方式不同.. (eq? 'a 'A) 返回#t 不是必需的(但很常见,如在 SISC 中),但如果您定义了一个函数 a,则要求您是可以使用(A) 调用它。

    【讨论】:

      【解决方案2】:

      在某些 Scheme 解释器中,符号不区分大小写,在 SISC 中似乎就是这种情况。这是依赖于实现的,并且在不同的实现中并不一致。例如,这些是 Racket 中的不同符号:

      (equal? 'HelloWorld 'helloworld)
      => #f
      

      据此FAQ

      R5RS 声明通过 Scheme 阅读器(即在阅读 Scheme 程序时)读取的标识符和符号不区分大小写,并且可能会更改其大小写。因此(eq? 'a 'A)(EQ? 'a 'A) 相同并返回#t。请注意,编写依赖于此的程序被认为是不好的风格,例如通过定义一个函数foo,然后使用(Foo)(FOO) 调用它。

      【讨论】:

      • 有趣...在我的系统上,上面返回了true。谢谢奥斯卡!
      【解决方案3】:

      Scheme 的大多数版本,就像它的母语 Lisp 一样,是不区分大小写的,所以可以按照实现的任何方式来插入符号;大多数版本的 Scheme 和 Lisp 都使用大写符号,但也可以使用小写,就像用户输入的任何大小写一样。自 R6RS 以来,大多数 Scheme 系统都是区分大小写的,并且将完全按照输入的符号进行转换。

      【讨论】:

        猜你喜欢
        • 2019-09-30
        • 1970-01-01
        • 2016-04-14
        • 2012-03-20
        • 2011-01-14
        • 1970-01-01
        • 2012-03-19
        • 2011-09-17
        • 1970-01-01
        相关资源
        最近更新 更多