Erlang全新。我試圖爲函數組合定義一些函數,例如compose
,juxt
和pipe
,但遇到了Erlang沒有(據我所知)可變參數這一事實,因此很難編寫一個可以工作的函數版本爲所有輸入。Erlang中缺少可變參數的變通辦法
到目前爲止,我的最好的辦法是硬編碼不同arities的功能達到一個合理的數量,以及提供一個版本,花費還有更大的,像這樣的列表:
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))))))).
其工作原理,但我很好奇,如果有更好的方法?
謝謝,解析轉換聲音有趣,我會看看。 – Russell 2013-03-19 22:38:37
如果你確實下了解析轉換路線,請記住,擁有巨大權力會帶來巨大的責任。 – 2013-03-19 22:41:34
看着它,我懷疑我會,我認爲我的硬編碼解決方案將足以覆蓋大多數情況,並且很難證明像邊緣情況下的解析變換這樣的東西。但是他們看起來很有趣。 – Russell 2013-03-19 22:44:06