有谁知道{/ 1}}和set!
的运行时在Scheme / Racket中是什么?
我认为begin
是不变的,但我不确定。
答案 0 :(得分:2)
设置!是O(1)。 Scheme和其他语言在这方面没有区别。
答案 1 :(得分:2)
set!
操作只是将一个值与一个符号相关联(“绑定”),当然在任何自尊的编程语言中都是O(1)
。根据实施细节,寻找绑定可能不一定是O(1)
,但这是完全不同的事情(我不知道Racket的具体细节)。
关于begin
,这是一个排序形式,应用它没有成本本身,只有它的内容(它里面的表达式)将决定它的时间复杂度。 set!
的相同内容, value 部分可能需要一些时间来评估,但set!
操作本身为O(1)
答案 2 :(得分:2)
一个警告:设置!并开始两个都有子表达。如果其中任何一个需要很长时间,那么评估集合! (或开始)也将。
答案 3 :(得分:1)
如果您担心set!
的表现,请记住避免变异可能会更快。请参阅Racket Guide: Mutation and Performance。