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)
就原生 Erlang 而言,没有您想要的任何形式的部分评估。你将不得不创造自己的乐趣来做到这一点。但是,如果您使用Erlando Monad 库,那么您可以使用模式匹配来创建它。它的工作原理是,erlang 编译器允许你在编译代码时使用 AST,这样你就可以做这样很酷的事情。
| 归档时间: |
|
| 查看次数: |
2262 次 |
| 最近记录: |