仍在努力理解與宏有關的最佳實踐。我正試圖編寫一個宏,它可以即時定義軟件包。Common Lisp初學者:Macro用於定義包中的軟件包的問題
(defmacro def-dynamic-package (name)
`(defpackage ,(intern (string-upcase name) "KEYWORD")
(:use :common-lisp)))
這僅適用於表達式,如能正常工作:
(def-dynamic-package "helloworld")
但悲慘的失敗了這樣的事情:
(defun make-package-from-path (path)
(def-dynamic-package (pathname-name path)))
或
(defun make-package-from-path (path)
(let ((filename (pathname-path)))
(def-dynamic-package filename)))
我瞭解最基本的宏工作,但如何執行這個逃脫我。
非常感謝,我有這樣的感覺,即學習Common Lisp對於學習何時以及何時不使用宏有很大的幫助。 – dnolen 2008-11-11 01:50:59
你在那裏做的是定義一個名爲「(STRING-UPCASE NAME)」的包 - 至少如果列表是一個有效的字符串指示符,那你就是在做什麼。無論如何,你的代碼不能移植工作。 – 2008-11-11 08:02:53