나는 람다로 확장되는 매크로 (Doug Hoyte의 것)를 기반으로 공통 리스프 내의 scheme의 단일 네임 스페이스를 에뮬레이션하려고하는데, f!
심볼 (Doug Hoyte 's o!
및 g!
기호)가 동일한 표현식으로 확장되지만 각 호출의 함수 위치에 funcall
이 추가됩니다. 예를 들어 :Common Lisp Lisp-1 매크로
(fplambda (f!z x) (f!z x x))
확장 할에 :
(LAMBDA (F!Z X) (FUNCALL F!Z X X))
매크로는 현재 다음과 같습니다
(defmacro fplambda (parms &body body)
(let ((syms (remove-duplicates
(remove-if-not #'f!-symbol-p
(flatten body)))))
`(lambda ,parms
(macrolet ,(mapcar
(lambda (f)
`(,f (&rest parmlist) `(funcall ,',f ',@parmlist)))
syms))
,@body)))
하지만 지금까지 내가 볼 수있는 (이 확장 위의 입력 제공) :
(LAMBDA (F!F X)
(MACROLET ((F!F (&REST PARMLIST) `(FUNCALL ,'F!F ',@PARMLIST))))
(F!F X X))
매크로 릿 정의에서 F! F는 인용되거나 인용되지 않아야하며 parmlist는 인용 부호로 묶여서는 안됩니다. 무슨 일 이니? 미리 감사드립니다.
고마워요! 나는 그것을 확실히 읽을 것이다. 내 똑똑한 뻔뻔스런 생각은 분명히 그들이 생각하는 것처럼 영리하지 못합니다. – DJD
그게 효과가 있지만 매크로를 사용하는 경우 그것은 함수 위치에 때 확장되지 않는 것 : ((fplambda ...) x y). 이 주위에 어떤 방법이 있습니까? – DJD