对 lisps 相当陌生,但在研究顺序整数生成代码时,我注意到对 (gensym)
的重复调用会将前缀后提供的数字增加 3。我很好奇为什么会这样。
user=> (gensym)
G__662
user=> (gensym)
G__665
user=> (gensym)
G__668
user=> (gensym)
G__671
user=> (gensym)
G__674
user=> (gensym)
G__677
我已经看到并理解
atom
的组合使用和 inc
,但我是 gensym
的新手功能。
最佳答案
这里有许多正确的答案。一是:没有!
user> (take 5 (repeatedly gensym))
(G__2173 G__2174 G__2175 G__2176 G__2177)
另一个是: gensym 不对它生成的符号的形式做任何保证,所以你真的不应该关心它们是否是连续的(或者即使它们包含数字)。您当然不应该劫持 gensym 来生成整数序列。
最后:为什么在你的例子中它增加了三个?因为每次对 repl 中的表单求值时,编译器都必须创建一些自己的 gensym。显然,对于表单
(gensym)
,它需要创建的数字是二。
关于clojure - 为什么 Clojure 的 gensym 在每次调用时增加 3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23596043/