PRINT 함수를 참조하기 위해 # 'PRINT를 사용하여 함수를 참조 할 수 있다는 것을 알고 있습니다. 첫 번째 요소가 'PRINT'인 목록 S가있는 경우 # (car S)를 사용하여 이것을 참조 할 수 있습니까?런타임시 이름으로 함수 호출
말 목록의 요소가 일부 기능의 이름 인 아톰 인 목록을보고 있습니다. 현재,이 작업을 수행 할 수
(defun aritheval (S)
(funcall
(cond
((eq '+ (car S)) #'+)
((eq '- (car S)) #'-)
((eq '* (car S)) #'*)
((eq '/ (car S)) #'/)
)
'2
'3
)
)
이 함수는 2 + 3, 2-3,리스트 S. S의 첫 번째 요소에 따라 2 * 3 2/3 이러한 함수의 이름을 포함 계산할 것이다.
기능 이름이 목록에 저장되는 기능을 어떻게 참조합니까? S가 (setq S '(PRINT RESTORE))에 의해 정의되었다고합시다. –
'apply'와'funcall' 둘 다 [function designator]를 취합니다 (http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_f .htm # function_designator). 따라서 함수 정의와 관련된 심볼은 유효한 인수입니다. 또한,'setq'는 아무것도 정의하지 않고 단지 기존 바인딩만을 설정합니다. 'defparameter' 또는'defvar'를 사용하여 전역 변수를 정의하십시오. – Ramarren