Emacs Lisp에서 funcall과 apply의 차이
Emacs
//
2024년 06월 28일 작성
//
2024년 06월 29일 업데이트
Emacs Lisp에서 함수를 매개변수로 받아서 자유롭게 호출하기 위해 funcall
과 apply
가 쓰이는데 이 둘이 어떻게 다른지 간단히 정리해 보자.
이 둘은 사실 용도는 동일하고 그저 사용법만 다르다고 봐도 될 것 같다.
funcall
funcall
은 첫 매개변수로 입력된 함수를 나머지 매개변수를 이용해 호출시키고 결과를 반환하는 함수다. 예를 들자면 아래와 같이 호출할 수 있다.
(funcall #'+ 1 2 3)
;; => 6
위 코드는 (+ 1 2 3)
을 호출하는 것과 동일하다.
apply
apply
도 첫 매개변수로 입력된 함수를 호출하는데 여기에 전달될 매개변수를 리스트로 전달 받는다는 차이가 있다. 예를 들자면 아래와 같이 호출할 수 있다.
(apply #'+ '(1 2 3))
;; => 6
이 코드도 (+ 1 2 3)
을 호출하는 것과 동일하다.
정리
즉 funcall
과 apply
의 결정적 차이는 매개변수(parameters)를 매개변수 리스트로 넘길 것이냐 아니면 별도의 순수 리스트 인스턴스로 넘길 것이냐 정도로 정리할 수 있을 것 같다.