我今天在玩宏,並在REPL中看到術語宏功能。我熟悉宏,編譯器宏和閱讀器宏,但沒有遇到這些。什麼是宏觀函數?
CL-USER> (defmacro fnaa (&rest rest) `(lambda ,@rest))
FNAA
CL-USER> #'fnaa
#<CLOSURE (LAMBDA (&REST SB-C::ARGS) :IN MACRO-FUNCTION) {1003A6DD6B}>
我檢查「FNAA並得到了這一點:
#<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 from the CLHS但不明白它是什麼和它做什麼
任何幫助照亮微距功能的目的將不勝感激。
[編輯] 從閱讀this看來,該功能實現擴展?那麼這個宏是有意義的,它實際上只是一個運行在宏擴展時間的函數(並且會產生代碼),但如果這是正確的話,爲什麼「宏函數宏」?
我感覺更接近,但我還是沒有完全得到它
[編輯AGAIN] 好了,所以看definition for macro我得到這個
macro n. 1. a macro form 2. a macro function. 3. a macro name.
所以是宏的這些組合和因此宏觀功能只是實現?
[編輯更多] 鑑於上述情況,CLHS entry for defmacro似乎是有道理的。任何人都可以確認,如果我在這裏的正確軌道上,並且如果有可能沒有宏功能的宏,如果不是,那麼我不明白爲什麼它指定了它是一個宏與宏功能'
[FINAL EDIT] 宏是一個符號與函數槽綁定到一個宏函數? (這一措辭是胡扯,我可以提供幫助這裏做!)
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