【发布时间】: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