当前位置:  开发笔记 > 编程语言 > 正文

Common Lisp的初学者:动态定义包的宏问题

如何解决《CommonLisp的初学者:动态定义包的宏问题》经验,为你挑选了1个好方法。

仍在努力了解宏的最佳实践.我正在尝试编写一个动态定义包的宏.

(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)))

我理解大多数基本宏是如何工作的,但是如何实现这个宏却让我感到惊讶.



1> Matthias Ben..:

defpackage是一个宏.因此,它在编译时扩展,而不是在运行时扩展.你想要的是在运行时调用以生成新包的东西.因此,defpackage无法为您做任何事情.

幸运的是,还有make-package,它提供了defpackage的功能.使用它而不是defpackage.


实际上,它的defpackage提供了make-package的功能,作为一个方便的宏.:-)
推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有