((or + -) 1 2 3)(or + -)가 +를 반환하기 때문에 이 식의 답은 6이 된다. 다른 예도 보자.
((and (= 1 1) +) 1 2 3) ((first [+ 0]) 1 2 3)정말 신기 하지 않은가???
(1 2 3 4) ("test" 1 2 3) java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.IFn이 에러는 함수가 아닌 것을 함수처럼 쓰려고 할 때 나오는 문장이다. 함수를 인자로 취하거나 함수를 반환하는 함수를 고차원함수(higher-order function)라고 부른다.
고차원 함수 기능이 있는 프로그래밍 언어는 일등급 함수(first-class function)를 지원한다고 하는데, 숫자/벡터 같이 익숙한 자료 유형을 다루는 것처럼 함수를 값으로 취급하기 때문이다.< br />
예를들어보자.
(inc 1.1) (map inc [0 1 2 3])map함수는 집합의 각원소([0 1 2 3])에 주어진 함수(inc)를 적용하여 새로운 목록을 만든다. 클로저가 일등급 함수를 지원하기 때문에 이를 지원하지 않는 다른 언어에 비해 훨씬 강력한 추상화가 가능하다(고 한다...).
댓글 없음:
댓글 쓰기