提问人:James Strieter 提问时间:10/15/2023 更新时间:10/15/2023 访问量:145
有没有一种 O(1) 方法可以让 Haskell 读取 C 样式数组?
Is There an O(1) Way To Give Haskell Read Access to C-style Arrays?
问:
我想从 C++ 调用 Haskell 函数:
a = f(x);
其中 f 是 Haskell 函数。
x 在 CPP 中。double[]
无论x发生什么状态突变,都会在C++中发生。例如
x[42] = x[41] + pi;
如果我能让 Haskell 看到,那就太好了.[Double]
每次调用时,我都能想到一些 O(N) 方法来构造一个新的,但我正在寻找一种 O(1) 方式。[Double]
f
请注意,只需要读取权限。
有没有 O(1) 方法可以做到这一点?
答:
4赞
Daniel Wagner
10/15/2023
#1
你所要求的确切的东西,在 O(1) 中是不可能的,除非你愿意开始做摊销 O(1) 式的事情。但作为替代方案,如果出现突变完成的时间点,您可能会喜欢 Data.Vector.Storable,如果没有,则可能喜欢 Data.Vector.Storable.Mutable
。[Double]
评论
0赞
luqui
10/15/2023
我的意思是。。。这可能以某种方式成为可能。列表中的每个数字都会在内存中有一个地址,所以如果你能找到它,你可以去玩它。这是否在 API 中公开是另一回事......
3赞
Daniel Wagner
10/15/2023
@luqui 如果我理解正确的话,您建议创建一个长度合适的列表,然后使用不安全的黑客来修改该列表中的值以匹配来自C++的数组。如果是这样,那么我相信第一步 - 创建一个正确长度的列表 - 已经不是 O(1)。
0赞
luqui
10/17/2023
该问题提到将多次调用。因此,我的意思是创建一次列表,然后,也许使用数组将索引映射到其相应的内存地址,在每次函数调用之前像数组一样修改它。无论如何,这似乎有点令人费解,但总比“不可能”要好。也许更像是“不建议”。f
评论
[Double]
[Double]
[Double]