包不可知的符号比较

tsi*_*kov 4 common-lisp

我有两个包,每个包含相同的符号:

(make-package "package1")
(make-package "package2")
(intern "SYMBOL" (find-package "PACKAGE1"))
(intern "SYMBOL" (find-package "PACKAGE2"))
Run Code Online (Sandbox Code Playgroud)

我想比较它们.我需要能够像这样编写一个s表达式:

(package-agnostic-eq 'package1::symbol 'package2::symbol) ; => t
Run Code Online (Sandbox Code Playgroud)

这样做最优雅,最简单的方法是什么?

特别是我对内置运算符感兴趣.这是我想出的功能:

(defun package-agnostic-eq (sym1 sym2)
  (string= (symbol-name sym1) (symbol-name sym2)))
Run Code Online (Sandbox Code Playgroud)

jki*_*ski 10

STRING=/ STRING-EQUAL将其作为参数字符串指示符,而不仅仅是字符串.这意味着您也可以将符号名称与它进行比较.

CL-USER> (make-package :foo)
#<PACKAGE "FOO">
CL-USER> (make-package :bar)
#<PACKAGE "BAR">
CL-USER> (intern "QUUX" :foo)
FOO::QUUX
NIL
CL-USER> (intern "QUUX" :bar)
BAR::QUUX
NIL
CL-USER> (string= 'foo::quux 'bar::quux)
T
Run Code Online (Sandbox Code Playgroud)