lambda — 익명 함수를 만드는 표기

lambda — 익명 함수를 만드는 표기

함수를 여기저기 넘기려면 매번 이름을 붙여 정의하기가 번거로워요. 정확히 한 번 쓸 함수면 이름 없이 그 자리에서 만드는 게 낫죠. lambda는 이름 없는 함수, 즉 익명 함수를 만드는 표기예요. #'(lambda ...) 축약형으로 널리 쓰여요.

출처: CLHS 공식 문서 - LAMBDA

본문

lambda는 일반 lambda-list와 폼들을 받아 함수를 만들어요. 함수 특수 폼인 function을 감싼 표기와 정확히 같은 의미예요.

lambda lambda-list [[declaration* | documentation]] form*
=> function

즉 아래의 세 표기는 모두 동일해요.

(lambda lambda-list [[declaration* | documentation]] form*)
==  (function (lambda lambda-list [[declaration* | documentation]] form*))
==  #'(lambda lambda-list [[declaration* | documentation]] form*)

#' 리더 매크로 덕분에 (function (lambda ...))을 간결하게 #'(lambda ...)로 적을 수 있어요. lambda는 바로 이 #' 축약의 축약이라 볼 수 있어요.

(funcall (lambda (x) (+ x 3)) 4)  =>  7

(lambda (x) (+ x 3))#' 없이도 funcall에 그대로 함수로 전달돼요. 실제로 lambda 매크로는 아래처럼 #'을 붙여주는 것과 똑같이 구현할 수 있어요.

(defmacro lambda (&whole form &rest bvl-decls-and-body)
  (declare (ignore bvl-decls-and-body))
  `#',form)

함께 보기

lambda(심볼)