gpt4 book ai didi

functional-programming - Elixir 中带有计数器的无限循环

转载 作者:行者123 更新时间:2023-12-04 08:41:36 26 4
gpt4 key购买 nike

我正在学习函数式编程,我想实现这样的东西。

while(true) do
if(somethingHappensHere) {
break
}
counter++
end
return counter

我怎样才能使用 Elixir 以功能方式做到这一点?

谢谢你。

最佳答案

虽然在大多数函数式编程语言中,人们会为此任务使用递归,但 Elixir 特别提供了一种不使用显式递归调用的方法: Enum.reduce_while/3 :

Enum.reduce_while(1..100, 0, fn i, acc ->
if condition, do: {:halt, acc}, else: {:cont, acc + i}
end)

对于惰性评估,可以使用 Stream.reduce_while/3 .

要使其无限,可以使用由 Stream 提供的无限生成器之一。模块,如 Stream.iterate/2 :

Stream.iterate(0, &(&1+1)) |> Enum.reduce_while(0, fn i, acc ->
if i > 6, do: {:halt, acc}, else: {:cont, acc + 1}
end)
#⇒ 7

为了递归,这就是在 Elixir 中实现递归解决方案的方式:

defmodule M do
def checker, do: & &1 <= 0
def factorial(v, acc \\ 1) do
if checker().(v), do: acc, else: factorial(v - 1, v * acc)
end
end

M.factorial 6
#⇒ 720

关于functional-programming - Elixir 中带有计数器的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47953838/

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