ale*_*rov 5 packages common-lisp
我目前正在编写矢量算术的小实现,我想定义我自己的« - »和«+»(以及其他)函数,它们将在向量上运行.
我还想将所有这些功能放在一个包中.
我想要这个假设的包,比如说它叫做«vec»,表现得像这样:
+和-为cl:+和cl:-,但没有明确地从进口的每一个其他需要的功能的必要性:cl.vec包,或者在:use另一个包的定义部分提到它时,common-lisp包的« - »和«+»仍然可用,并且包vec的函数被调用(vec:+ v1 v2),因此vec:+和之间没有名称冲突cl:+.那么,什么被认为是实现这种行为的最佳(和正确)方式?
无法定义符号+并同时+从另一个包引用它.
您不需要导入符号.如果它们被导出,您可以将它们用作foo:+.如果它们未导出,则可以将它们用作foo::+.
有没有点using(在程序上的意义-肯定是有意义的引入包为载体操作的命名空间)一个包,如果你不希望使符号在使用包访问.如果你想写vec:+,那么使用包是没有意义的VEC.只需从中导出符号VEC.
仅用于说明:
CL-USER 6 > (defpackage "VEC"
(:use "CL")
(:shadow cl:+ cl:-)
(:export "+" "-"))
#<The VEC package, 0/16 internal, 2/16 external>
CL-USER 7 > (defun vec:+ (a b) (+ a b))
VEC:+
CL-USER 8 > (defun vec:- (a b) (- a b))
VEC:-
CL-USER 9 > (defpackage "GRAPH" (:use "CL"))
#<The GRAPH package, 0/16 internal, 0/16 external>
CL-USER 10 > (in-package "GRAPH")
#<The GRAPH package, 0/16 internal, 0/16 external>
GRAPH 11 > (defun foo (a b) (+ (vec:+ a b) 42))
FOO
Run Code Online (Sandbox Code Playgroud)
注意,如果当前包是VEC,则+参考VEC:+.对于CL,+您需要编写CL:+.
始终牢记:
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |