오늘 매크로를 가지고 놀았으며 매크로 함수라는 용어가 REPL에 나타났습니다. 필자는 매크로, 컴파일러 매크로 및 독자 매크로에 익숙하지만이 매크로를 사용하지는 않았습니다.매크로 기능이란 무엇입니까?
CL-USER> (defmacro fnaa (&rest rest) `(lambda ,@rest))
FNAA
CL-USER> #'fnaa
#<CLOSURE (LAMBDA (&REST SB-C::ARGS) :IN MACRO-FUNCTION) {1003A6DD6B}>
나는 '검사 fnaa이 있어요 : 나는 this from the CLHS을 읽고 있지만, 그것이 무엇과 매크로 기능의 목적을 조명
어떤 도움을 무엇을하는지 이해할 수 없었다
#<SYMBOL {1003A40A5F}>
--------------------
Its name is: "FNAA"
It is unbound.
It a macro with macro-function: #<FUNCTION (MACRO-FUNCTION FNAA) {1003A610BB}>
It is internal to the package: COMMON-LISP-USER
Property list: NIL
을 것 대단히 감사하겠습니다.
[편집] this이 기능이 확장 기능을 구현 한 것으로 보입니까? 매크로가 실제로 매크로 확장 시간 (및 코드 결과)에서 실행되는 함수이기 때문에 의미가 있습니다. 그렇다면 매크로 함수가있는 매크로의 용어가 올바른 이유는 무엇입니까?
나는 가까운 느낌하지만 난 여전히 매우 그것을 못하고
[편집 AGAIN] 좋아 그래서 definition for macro보고 내가 얻을이
macro n. 1. a macro form 2. a macro function. 3. a macro name.
그래서 매크로 이들의 조합이고, 따라서 매크로 함수는 단지 구현 일뿐입니다?
[편집 추가] 위의 결과를 보면 CLHS entry for defmacro이 맞는 것처럼 보입니다. 아무도 내가 올바른 길을 가고 있는지, 그리고 매크로 함수없이 매크로를 가질 수 있는지를 확인해 줄 수 있겠는가? 그렇지 않다면 왜 그것이 그것이 '매크로라는 사실을 명시하고 있는지 이해할 수 없다. 매크로 함수 사용
[최종 편집] 매크로는 함수 슬롯이 매크로 함수에 바인드 된 심볼입니까? (이 표현은 내가 여기 도움으로 할 수있는 쓰레기입니다!)
CL-USER> (setf (macro-function 'jam) (lambda (x y) nil))
잼
#<SYMBOL {100400317F}>
--------------------
Its name is: "JAM"
It is a global variable bound to: NIL [unbind]
It a macro with macro-function: #<FUNCTION (LAMBDA (X Y)) {1005522FAB}> [unbind]
It is internal to the package: COMMON-LISP-USER [export] [unintern]
Property list: NIL
건배, 전에 다른 답변을 읽었지만이 작은 모험을하기 전에 그것을 이해할 수 없었다 :) 매크로 기능이없는 매크로의 개념은 그다지 이해가되지 않는다. – Baggers
@Baggers : '매크로 함수가없는 매크로'는 '함수 정의가없는 함수'와 같은 의미가 있습니다. :-) – sds
하하, 잘 넣어. 감사! – Baggers