Curlang函数Erlang

Kel*_*reu 8 erlang haskell currying fold

我正在尝试使用Erlang重做我所有的Haskell作业问题,而有一件事让我知道如何使用没有所有参数的函数列表.

示例:我正在尝试使用此折叠,但我不知道如何传递函数以便它在累加器上运行

%%inside my module)
add(X,Y) -> X + Y.

multiply(X,Y) -> X*Y.
Run Code Online (Sandbox Code Playgroud)

然后在命令行中使用它:

lists:foldl(fun(Function,Accumulator) -> Function(Accumulator) end, 3, [add(3),multiply(5)]).
Run Code Online (Sandbox Code Playgroud)

Dan*_*nko 10

在Erlang中,您必须调用函数传递它需要的所有参数.但是你可以通过创建一个匿名函数来轻松避免它,它只接受你需要的那些参数,然后正确地调用你的函数.如果你需要一个带有一个参数X并调用函数add(3,X)的函数,你可以创建一个像这样的匿名函数:

fun (X) -> add(3, X) end
Run Code Online (Sandbox Code Playgroud)

这是您的任务的示例:

lists:foldl(fun (Function, Accumulator) -> Function(Accumulator) end, 3,
    [fun (X) -> add(3, X) end, fun (X) -> multiply(5, X) end]).
Run Code Online (Sandbox Code Playgroud)


Zac*_*y K 5

就原生 Erlang 而言,没有您想要的任何形式的部分评估。你将不得不创造自己的乐趣来做到这一点。但是,如果您使用Erlando Monad 库,那么您可以使用模式匹配来创建它。它的工作原理是,erlang 编译器允许你在编译代码时使用 AST,这样你就可以做这样很酷的事情。