2

我已经使用 asdf 定义了一个通用的 lisp 包,它同时使用了 parenscript 和 clsql。

但是这些包围绕函数 GET-TIME 存在命名冲突。加载模块后,我可以在提示符下手动解决冲突(代码可能不准确):

Select a symbol to be made accessible in package MY_PACKAGE:
   1. PS-JS-SYMBOLS:GET-TIME
   2. CLSQL-SYS:GET-TIME

我选择选项1。

修改我的项目以便自动解决此冲突的最佳方法是什么?

我要修改 .asd 文件还是 project.lisp 文件?

我认为答案可能与:shadowing-import-from有关,但我并不真正理解该文档页面上给出的示例。

4

2 回答 2

5

Packagessymbolsexportingusing等是 Common Lisp 的一个特性,而不是特定于 ASDF。

CL-USER 1 > (defpackage "FOO" (:use "CL") (:export "BAZ"))
#<The FOO package, 0/16 internal, 1/16 external>

CL-USER 2 > (in-package "FOO")
#<The FOO package, 0/16 internal, 1/16 external>

FOO 3 > (defun baz () 'FOO)
BAZ

FOO 4 > (defpackage "BAR" (:use "CL") (:export "BAZ"))
#<The BAR package, 0/16 internal, 1/16 external>

FOO 5 > (defun bar:baz () 'bar::bar)
BAR:BAZ

FOO 6 > (in-package "CL-USER")
#<The COMMON-LISP-USER package, 54/64 internal, 0/4 external>

CL-USER 7 > (defpackage "ZIPPY"
              (:use "FOO" "BAR")
              (:shadowing-import-from "BAR" "BAZ"))
#<The ZIPPY package, 1/16 internal, 0/16 external>

CL-USER 8 > (in-package "ZIPPY")
#<The ZIPPY package, 1/16 internal, 0/16 external>

ZIPPY 9 > (baz)
BAR::BAR
于 2012-10-26T09:57:47.673 回答
0

基于上面@Rainer Joswigs 的回答,我的问题的具体答案是编写我的defpackage 表单,如下所示:

 (defpackage #:my-package 
      (:use :cl :clsql :parenscript)
      (:shadowing-import-from :parenscript "GET-TIME")
      )
于 2012-10-29T10:55:38.013 回答