我正在使用mathematica 7,并且正在尝试使用单链表(~50,000 个元素)来避免在动态列表中使用 AppendTo 来提高速度。在这个测试中,我可以创建一个包含 10 个元素的列表,如下所示
list1 = Fold[{#1, #2} &, {}, RandomInteger[10^5, 10]]
我尝试Part
像这样访问它(访问一个随机元素 100 次)
Timing[list1[[Sequence @@ ConstantArray[1, #], 2]] & /@RandomInteger[{1,10}, 100]]
这适用于小列表(如上的 10 个)。由于我不明白的原因,当列表有更多元素(如 10^4)时,这会杀死内核。我试过在这个网站和其他地方四处寻找,但就是不知道我应该如何使用链接列表。我什至尝试过使用不同的实现,f[e1,f[e2,f[e3,...f[]...]]]
但我不知道在使用此方案时访问和操作元素的好方法。我想这个问题必须解决,$RecursionLimit
但我不知道如何解决它。
特别是我希望能够使用
list1[[Sequence @@ ConstantArray[1, index], 2]] = new value
在我的代码中。同样,这在列表很小但最终会导致较大列表崩溃的情况下有效。奇怪的是内核并不总是崩溃,而只是随机地用于大型列表。这听起来类似于在 SE 上描述的内容,但我不知道该讨论是否相关。真的,我只需要帮助修改 LL 元素并在mathematica 中正确使用 LL。
提前致谢。