【发布时间】:2013-03-08 19:57:20
【问题描述】:
对 Erlang 来说是全新的。我正在尝试为函数组合定义一些函数,例如compose、juxt 和pipe,但遇到了 Erlang 没有(据我所知)可变参数的事实,因此很难只编写一个版本适用于所有输入的此类函数。
到目前为止,我最好的想法是将不同数量的函数硬编码到一个合理的数量,并提供一个版本,该版本可以接受更大的列表,如下所示:
pipe (X, Fs) when is_list(Fs) -> lists:foldl(fun (F, Acc) -> F(Acc) end, X, Fs);
pipe (X, F) -> F(X).
pipe (X, F, G) -> G(F(X)).
pipe (X, F, G, H) -> H(G(F(X))).
pipe (X, F, G, H, I) -> I(H(G(F(X)))).
pipe (X, F, G, H, I, J) -> J(I(H(G(F(X))))).
pipe (X, F, G, H, I, J, K) -> K(J(I(H(G(F(X)))))).
pipe (X, F, G, H, I, J, K, L) -> L(K(J(I(H(G(F(X))))))).
哪个有效,但我很好奇是否有更好的方法?
【问题讨论】:
标签: erlang variadic-functions function-composition