You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elixir求和函数未返回预期结果问题排查

Elixir函数始终返回0的问题修复

你的代码问题核心在于Elixir的变量不可变性:你在for循环里尝试重新赋值result,但Elixir中变量一旦定义就无法被修改——每次result = result + i都是创建了一个仅在当前if块内有效的新局部变量,完全不会影响外层初始化为0的result。循环结束后,外层的result仍为初始值0,所以函数始终返回0。

以下是几种可行的修复方案:

方案1:用Enum.reduce实现累加

Enum.reduce是函数式编程中实现累加的标准方式,通过累加器(acc)逐步计算总和:

defmodule Challenge do
  def solution(number) do
    0..(number - 1)
    |> Enum.reduce(0, fn i, acc ->
      if rem(i, 3) == 0 || rem(i, 5) == 0, do: acc + i, else: acc
    end)
  end
end

方案2:for推导式过滤后求和

先通过for推导式筛选出符合条件的数字,再用Enum.sum直接求和,写法更简洁:

defmodule Challenge do
  def solution(number) do
    for i <- 0..(number - 1), rem(i, 3) == 0 or rem(i, 5) == 0, do: i
    |> Enum.sum()
  end
end

方案3:过滤+求和的直观写法

先用Enum.filter筛选出3或5的倍数,再调用Enum.sum计算总和,逻辑最清晰:

defmodule Challenge do
  def solution(number) do
    0..(number - 1)
    |> Enum.filter(fn i -> rem(i, 3) == 0 || rem(i, 5) == 0 end)
    |> Enum.sum()
  end
end

以上三种方案都能通过你的测试用例:输入10时,计算的是0+3+5+6+9=23,与预期结果一致。

内容的提问来源于stack exchange,提问作者Stefan Glova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:05:06