Erlangはまったく新しい。compose
などの関数合成用の関数を定義しようとしていますjuxt
がpipe
、Erlangには(私の知る限り)varargsがないため、すべての入力で機能する関数のバージョンを1つだけ作成するのは困難です。 。
これまでのところ、私の最善のアイデアは、さまざまなアリティの関数を妥当な数までハードコーディングすることと、次のようなより大きなもののリストを取得するバージョンを提供することです。
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))))))).
これは機能しますが、もっと良い方法があるかどうか知りたいですか?