对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
Run Code Online (Sandbox Code Playgroud)
我已经看到和理解的结合使用的atom和inc,但我是新来的gensym功能.
ama*_*loy 12
这里有很多正确的答案.一个是:它没有!
user> (take 5 (repeatedly gensym))
(G__2173 G__2174 G__2175 G__2176 G__2177)
Run Code Online (Sandbox Code Playgroud)
另一个原因是:gensym对它生成的符号形式没有任何保证,所以你真的不应该关心它们是否是顺序的(或者即使它们包含数字).你当然不应该劫持gensym来产生一个整数序列.
最后:为什么它在你的例子中增加了三个?因为每次在repl中评估表单时,编译器都必须创建自己的一些gensyms.显然,对于表单(gensym),它需要创建的数字是两个.
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |