문제

ANSI 공통 Lisp.마지막 경우에 다른 답변을 얻는 이유는 무엇입니까?

(list 1 2 3 nil) ; (1 2 3 nil)
(funcall (function list) 1 2 3 nil) ; (1 2 3 nil)
(apply (function list) '(1 2 3 nil)) ; (1 2 3 nil)
(apply (function list) 1 2 3 nil) ; (1 2 3)
도움이 되었습니까?

해결책

APPLY 인수로 기대합니다 :

  • 함수
  • 영 ...n개의 인수
  • 그런 다음 끝에 인수 목록이 있습니다.

함수는 기본적으로 다음의 결과로 호출됩니다. (list* 0-arg ... n-arg argument-list)

참고하세요 (list* '(1 2 3)) 그냥 평가한다 (1 2 3).

인수는 다음과 같습니다. 확산 가능한 인수 목록 커먼리스프에서.

CL-USER 60 > (apply (function list) 1 2 3 nil)
(1 2 3)

CL-USER 61 > (apply (function list) (list* 1 2 3 nil))
(1 2 3)

CL-USER 62 > (apply (function list) (list* '(1 2 3)))
(1 2 3)

APPLY 의도적으로 이러한 확산 가능한 인수 목록을 사용합니다.예를 들어 (... 1 2 3 '(4 5)).와 함께 FUNCALL 평소대로 인수를 작성해야 합니다. (... 1 2 3 4 5).

APPLY Common Lisp에는 단일 목적이 있습니다.계산된 인수 목록을 사용하여 함수를 호출할 수 있습니다.이를 좀 더 편리하게 만들기 위해 확산 가능한 인수 목록이라는 아이디어가 사용되었습니다.예를 들어 Emacs Lisp에서도 동일하게 작동합니다.

인수 목록이 있고 앞에 인수 두 개를 추가한다고 가정해 보세요.

CL-USER 64 > (apply '+ args)
60

CL-USER 65 > (apply '+ 1 2 args)
63

CL-USER 66 > (apply '+ (append (list 1 2) args))
63
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top