2013-02-27 5 views
1

Erlang에서 다음과 같은 고차 하스켈 함수를 작성하는 방법은 무엇입니까?Erlang의 고차 함수

applyTwice :: (a -> a) -> a -> a 
applyTwice f x = f (f x) 

답변

3
1> Apply2 = fun(F, X) -> F(F(X)) end. 
#Fun<erl_eval.12.82930912> 
2> F = fun(Arg) -> Arg * 2 end. 
#Fun<erl_eval.6.82930912> 
3> Apply2(F, 10). 
40 

문제는 내가 당신이 실제로 필요한 있는지 확실하지 않다,이다. Haskell에서는 함수로 applyTwice f을 사용할 수 있지만 Erlang에서는 사용할 수 없습니다 (내장 된 partial 또는 curry 기능이 없음). 또한 얼랑 (Erlang)과 같이 할 수는 없습니다

applyTwice :: (a -> a) -> a -> a 
applyTwice f = f . f 
+0

얼랑 (Erlang)에서 양식을 카레합니까? – coffeMug

+1

@Coffe_Mug currying을 처리 할 구문 설탕은 없습니다. coure 중 필요한 범위의 함수를 반환하는 함수를 작성할 수는 있지만 작성하고 읽는 것은 어렵습니다. –

+1

@Coffe_Mug 또한 동일하고 다른 * arity * (args 수)를 가진 Erlang 함수는 ** 다른 ** 함수입니다. 그런 다음 currying은 지저분 해집니다. – rvirding