2011년 2월 20일 일요일

erlang with higher order function

http://learnyousomeerlang.com/higher-order-functions#get-functional


-module(hhfuns).
-compile(export_all).
one() -> 1.
two() -> 2.
add(X,Y) -> X() + Y()

> hhfuns:add(fun hhfuns:one/0, fun hhfuns:two/0).


fun function_name/arity를 붙여줘야만 one,two가 atom으로 해석되지 않고, 함수를 넘겨준 것으로 이해된다.

다른 방법은 없을까? 즉, one(),two()가 함수였다는 것을 알 수 있는 방법이 있어야 한다.

* type system이 있었다면? compile type때 미리 오류를 알 수 있었을 것이다.
 Erlang의 아쉬운 장면이다.

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^

댓글 2개:

  1. add(X, Y) when is_function(X), is_function(Y) ->
    X() + Y();

    add(X, Y) ->
    error.

    이러면 됩니당.

    답글삭제
  2. 국현님, 그런데 그건, 역시 추가적인 코딩이 필요하네요~

    답글삭제