如何在Elixir中的匿名函数中分配给局部变量?

魔方

我想找到一个数字的主要因素。我写:

defmodule Prime do
  def factors(n) when is_integer(n) and n > 1 do
    Stream.unfold(n, fn 1 -> nil; n -> &({&1, div(n, &1)}).(lf n) end) |> Enum.to_list
  end

  def lf(n) when is_integer(n) and n > 1 do
    if rem(n, 2) == 0 do 2
    else Stream.iterate(3, &(&1 + 2)) |> Stream.filter(&(rem(n, &1) == 0))
                                      |> Stream.take(1) |> Enum.to_list |> hd
    end
  end
end

问题出在第3行:在匿名函数中,我必须返回元组{f, n / f},其中f是的最低因子,n是在lf函数中计算的但是,我不想两次计算(我可以这样做{lf n, div(n, lf n)})。我也试图定义一个闭包,但是显然不允许这样做。

我使用的技巧甚至都行不通。

怎么做?

丹尼斯编码器

您是否尝试在匿名函数中分配局部变量?我添加了换行符以使其更具可读性。

def factors(n) when is_integer(n) and n > 1 do
  Stream.unfold(n,
    fn 1 -> nil
       n -> local = lf n
            {local, div(n, local)}         
    end) |> Enum.to_list
end

顺便说一句,您可以lf使用来缩短功能Enum.find(我也将lf执行私有功能。)

defp lf(n) when is_integer(n) and n > 1 do
  if rem(n, 2) == 0 do 2
  else Stream.iterate(3, &(&1 + 2)) |> Enum.find(&(rem(n, &1) == 0))
  end
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将ivars分配给函数内的局部变量?

如何在T-SQL中将查询结果分配给局部变量

如何在python中将局部变量正确分配给for循环?

Linq:如何在数组中的linq中分配局部变量

如何在不首先将其分配给局部变量的情况下为函数返回的MATLAB数组建立索引?

将窗口变量分配给局部变量

C ++-将参数分配给函数标题中的局部变量

将js函数分配给局部变量后,为什么它们会失败?

将实例字段分配给局部变量

想法:“将语句分配给新的局部变量”?

使用if语句将值分配给局部变量

Java内存(堆栈)分配给局部变量

局部变量分配给哪个对象?

指针被分配给错误的局部变量

将退出代码分配给Shell局部变量

将引用参数分配给局部变量

将数组值分配给局部变量

在Android Studio中分配给新的局部变量快捷方式(ctrl-2 L)

如何读取键盘输入并将其分配给局部变量?

如何将值从locals()分配给具有相同名称的局部变量?

我们如何在内核函数中分配给Ctree中的本地内存

将文字值分配给LLVM IR中的局部变量

为什么分配给堆栈中的局部变量的内存比C ++所需的内存多?

通过通道值中的指针分配给局部变量

如何在不更改全局变量的情况下更改分配给全局变量值的局部变量?

如何在节点js中分配全局变量和局部变量

Java编译器如何在局部变量表中分配索引?

如何在PostgreSQL的更新语句中分配局部变量

如何在Python中的函数中修改局部变量?