Immer noch zu kämpfen, um zu verstehen, welche Best Practices in Bezug auf Makros sind. Ich versuche, ein Makro zu schreiben, das Pakete on-the-fly definiert.Anfänger bei Common Lisp: Makro-Frage zum Definieren von Paketen im Flug
(defmacro def-dynamic-package (name)
`(defpackage ,(intern (string-upcase name) "KEYWORD")
(:use :common-lisp)))
Dies funktioniert für Ausdrücke nur fein wie:
(def-dynamic-package "helloworld")
aber scheitert kläglich dies so etwas wie:
(defun make-package-from-path (path)
(def-dynamic-package (pathname-name path)))
oder
(defun make-package-from-path (path)
(let ((filename (pathname-path)))
(def-dynamic-package filename)))
Ich verstehe, wie die meisten grundlegende Makros funktionieren aber wie um dies zu implementieren, entkommt mir.
Ah, das war eines der Probleme, die ich hatte, ein Makro zu entwerfen, das defpackage selbst war ein Makro machte es mir schwer, über einen guten Ansatz zu begründen. Danke. – dnolen
Eigentlich ist es defpackage, das make-package Features als handliches Makro. :-) –