我有两个包裹,每个包裹都有相同的符号:
(make-package "package1")
(make-package "package2")
(intern "SYMBOL" (find-package "PACKAGE1"))
(intern "SYMBOL" (find-package "PACKAGE2"))我想比较一下它们。我需要能写出这样的s表达式:
(package-agnostic-eq 'package1::symbol 'package2::symbol) ; => t,做这件事最优雅和最直接的方法是什么?
特别是,我对内置操作符感兴趣。下面是我想出的函数:
(defun package-agnostic-eq (sym1 sym2)
(string= (symbol-name sym1) (symbol-name sym2)))发布于 2016-11-28 11:47:29
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)
Thttps://stackoverflow.com/questions/40843293
复制相似问题