Does anyone know what the runtime of set!
and begin
is in Scheme/Racket?
I think set!
is constant but I'm not sure.
该set!
操作只是将一个值关联(“绑定”)一个符号,这肯定是O(1)
任何自尊的编程语言。寻找绑定可能不一定O(1)
取决于实现细节,但这是完全不同的事情(我不知道 Racket 的细节)。
关于begin
,这是一个排序形式,应用它本身没有成本,只有它的内容(它包含的表达式)将决定它的时间复杂度。同样的事情set!
,赋值的值部分可能需要一些时间来评估,但set!
操作本身是O(1)
一个警告:设置!并且开始都有子表达式。如果其中任何一个需要很长时间,那么就对集合进行评估!(或开始)也会。
放!是 O(1)。Scheme 和其他语言在这方面没有区别。
如果您担心 的性能set!
,请记住避免突变可以更快。请参阅球拍指南:突变和性能。