【问题标题】:Is it possible to create uninterned symbols in Scheme?是否可以在 Scheme 中创建 uninterned 符号?
【发布时间】:2020-12-15 14:31:24
【问题描述】:

回答What is the difference between an “interned” and an “uninterned” symbol 解释这些符号之间的区别。我的问题是这些符号可以按照 R7RS 规范在 Scheme 中创建吗?

我已经在 Guile 中对此进行了测试:

scheme@(guile-user)> (eq? (string->symbol "foo") (string->symbol "foo"))
$1 = #t

所以string->symbol 创建了实习符号,因为 eq?返回#t,是否有其他方法可以创建无符号符号或者 gensym 只是创建这种类型的符号?在 LIPS 中,我的 Scheme implementation in JavaScript 我使用 JavaScript 符号作为名称(用于 gensyms)和字符串作为普通符号,但我不实习它们(我有任务这样做),在我的情况下 eq?只需检查值的类型是否为 LSymbol 并检查名称是字符串还是 JavaScript 符号,因此 gensym 永远不会相同,因为没有 Symbol.for 创建的符号永远不会相同。

我想知道,是否足以实习每个符号(每个值只保留一个实例)并且 gensym 不这样做,才能让这个系统按照 R7RS 规范正常工作?

【问题讨论】:

    标签: scheme


    【解决方案1】:

    不便携,不。 R7RS-small 有话要说:

    注意:一些实现具有被称为“uninterned symbols”的值,它破坏了写/读不变性,并且还违反了两个符号相同的规则,当且仅当它们的名称拼写相同时。此报告未指定依赖于实现的扩展的行为。

    我不知道 R7RS-large 的计划是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 2022-07-29
      • 1970-01-01
      相关资源
      最近更新 更多