Emacs Lisp에서 funcall과 apply의 차이

Emacs // 2024년 06월 28일 작성 // 2024년 06월 29일 업데이트

Emacs Lisp에서 함수를 매개변수로 받아서 자유롭게 호출하기 위해 funcallapply가 쓰이는데 이 둘이 어떻게 다른지 간단히 정리해 보자.

이 둘은 사실 용도는 동일하고 그저 사용법만 다르다고 봐도 될 것 같다.

funcall

funcall은 첫 매개변수로 입력된 함수를 나머지 매개변수를 이용해 호출시키고 결과를 반환하는 함수다. 예를 들자면 아래와 같이 호출할 수 있다.

(funcall #'+ 1 2 3)
;; => 6

위 코드는 (+ 1 2 3)을 호출하는 것과 동일하다.

apply

apply도 첫 매개변수로 입력된 함수를 호출하는데 여기에 전달될 매개변수를 리스트로 전달 받는다는 차이가 있다. 예를 들자면 아래와 같이 호출할 수 있다.

(apply #'+ '(1 2 3))
;; => 6

이 코드도 (+ 1 2 3)을 호출하는 것과 동일하다.

정리

funcallapply의 결정적 차이는 매개변수(parameters)를 매개변수 리스트로 넘길 것이냐 아니면 별도의 순수 리스트 인스턴스로 넘길 것이냐 정도로 정리할 수 있을 것 같다.

관련된 글들