gpt4 book ai didi

scheme - Scheme 符号区分大小写

转载 作者:行者123 更新时间:2023-12-04 21:50:38 31 4
gpt4 key购买 nike

根据我的阅读,Scheme 中的符号不​​区分大小写 - 即 (eq? 'Hello 'hello) 评估为 #t (因为两者都由符号 'hello 表示,并且 scheme 具有两个具有相同名称的符号是同一个对象的属性)。但是,对我来说情况似乎并非如此,无论我尝试使用 Scheme 的 #lang scheme#lang racket 还是 #lang eopl 风格,事情似乎都区分大小写。有谁知道为什么?

最佳答案

简短/简单的答案:区分大小写因标准而异,并且您使用的特定实现具有区分大小写的标识符。但这些信息孤立地可能不是很有帮助。那么“错”了什么呢?

鉴于您提到 #lang s,很明显您使用的是 Racket 。 Racket 是 Scheme 的后代,但它不符合任何现有的 Scheme 标准。然而,Racket 是可扩展的——它可以支持很多语言,甚至是用户定义的语言——所以 Racket 支持不同的 Scheme 迭代。

哪些方案区分大小写?

在撰写本文时,Scheme 标准存在三个相关版本:R5RS、R6RS 和 R7RS。

  • R5RS 始终不区分大小写。
  • R6RS 始终区分大小写。
  • R7RS 默认区分大小写,但 #!fold-case 指令或 include-ci 形式可以禁用区分大小写。

  • 正如您所看到的,这个问题确实不是很明确:在过去的三个标准中,它并没有保持一致。事实上,鉴于默认情况下 R7RS 和 R6RS 都区分大小写,现在说 Scheme 区分大小写可能更准确。然而,虽然 R5RS 已经过时了很长时间,但它仍然作为许多书籍、解释器和编译器以及其他 Material 中使用的“方案”继续存在,因此可能得出“方案不区分大小写”的结论。

    你用的是哪个方案?

    他们都没有。也许令人困惑的是,甚至 #lang scheme 也不是任何 Scheme 标准的实现。事实上, #lang scheme 是一种已弃用的语言,已被 #lang racket 完全取代(前者在 PLT Scheme 重命名为 Racket 之前就存在,很大程度上是为了减少对其“方案”不是实际方案实现的混淆)。

    那么,您可能会问,如何在 Racket 中获得实际的 Scheme?好吧,Racket 确实提供了各种 Scheme 标准的实现。 #lang r5rs#lang r6rs 都是相关 Scheme 标准的内置实现。 R7RS 实现可通过 #lang r7rs 包作为 r7rs 使用。

    Racket 的所有语言都可以互操作,因此您选择的语言取决于您,尽管 RnRS 语言在 Racket 社区中往往未被使用( #lang racket 对于编写程序比任何 Scheme 实现更有用),但它们可以如果您想编写在不同 Scheme 实现上运行的程序,则很有用。

    关于scheme - Scheme 符号区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33677474/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com