2016년 11월 10일 목요일

[누구나 쉽게 배우는 클로저] [함수(function)] 스터디 8

함수 호출, 매크로 호출, 특수 형식

앞에서 함수 호출하는 법을 보았다(함수 식을 연산자로 하는 식). 이와 다른 두 가지 형태로는 매크로 호출(macro call)특수 형식(special form)이 있다. 일단 다른 이야기보다 함수에 대해 더 다뤄보자.

(defn no-params
  []
  "I take no parameters!")

(defn one-param
  [x]
  (str "I take one paramter: " x))

(defn two-params
  [x y]
  (str "Two parameters! That's nothing! Pah! I will smooth them "
       "together to spite you! " x y))
매개변수가 0인 것, 1개인 것, 2개인 것을 나열했다. 클로저의 함수는 개수 덧쓰기(arity overloading)를 지원한다. 즉, 인자 개수에 따라 서로 다른 함수 몸체가 실행되는 함수를 만들 수 있다는 것이다.
(defn multi-arity
  ;; 3개의 인자와 함수 몸체
  ([first-arg second-arg third-arg]
    (do-things first-arg second-arg third-arg))
  ;; 2개
  ([first-arg second-arg]
    (do-things first-arg second-arg))
  ;; 1
  ([first-arg]
    (do-things first-arg)))
한번 만들어보자.
(defn slap ([name sound]
    (str  name "에게 뺨을 때렸더니? " sound "! 소리가 났다."))
  ([name]
    (str name "에게 뺨을 딱!")))

> (slap "you")
"you에게 뺨을 딱!"
> (slap "you" "BBAK!")
"you에게 뺨을 때렸더니? BBAK!! 소리가 났다."
느낌이 오는가?? 그냥 오버로딩 한다 생각하고 괄호로 만들면 된다.

댓글 없음:

댓글 쓰기