gpt4 book ai didi

elixir - 在 Elixir 中编写嵌套 for 循环的更好方法

转载 作者:行者123 更新时间:2023-12-05 08:31:41 25 4
gpt4 key购买 nike

请建议将以下 C 代码写入 elixir 的更好方法(更多 elixir 方法)。

int some_num = 0;

for(int i = 0; i < 100; i++){
for(int j = 0; j < 1000; j++){
for(int k = 0; k < 10000; k++){
some_num += 1;
}
}
}
printf("%d", some_num);

并且能否通过get benefit elixir concurrency来实现?

编辑:有点背景,我对 Elixir 很新鲜并且还在学习。这个问题的主要动机是编写比应用并发更符合地道的 Elixir 代码。

最佳答案

准确实现您编写的内容的最简单方法是使用 for 宏:

sum =
for i <- 0..100,
j <- 0..1_000,
k <- 0..10_000,
reduce: 0 do
acc -> acc + 1
end

编辑:

:reduce 选项在新版本的 Elixir (1.8+) 中可用。在旧版本中,您可以使用嵌套的 Enum.reduce/3:

Enum.reduce(0..100, 0, fn _, acc ->
acc + Enum.reduce(0..1_000, 0, fn _, acc ->
acc + Enum.reduce(0..10_000, 0, fn _, acc ->
acc + 1
end)
end)
end)

关于问题的第二部分:,这个循环不会从并发中获益太多,如果它以任何方式改变时间,那么它只会更慢。在这种特殊情况下,它可以写成 sum = 100 * 1_000 * 10_000 这可能会更快,因为编译器可以轻松地将其优化为 10_000_000(IIRC Erlang 编译器无法优化给常量循环)。

TL;DR 这种明显的循环不能通过并发来改善,在一般情况下很难说进程(又名并行化)是否有帮助。记住 parallel != concurrent 也很重要,因此在 N-1 的机器上运行 N Erlang 进程不会获得加速> 调度程序(默认 CPU 数量)。

关于elixir - 在 Elixir 中编写嵌套 for 循环的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56196664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com