从cl-user
包中导入一些东西是个好主意吗?据我所知,这个包的内容没有由标准指定,从cl-user
包中断函数导入是否与程序兼容?例如,我使用GNU CLISP,我想在我的程序中使用xor
和!
函数,我已经从cl-user
包中导入它们,但我怎么知道其他实现包含这些功能呢?是否有任何约定?
答案 0 :(得分:3)
在CLISP上,xor
和!
都是EXT
包的外部,而不是CL-USER
。它们不是标准函数,因此在编写可移植代码时不能依赖它们的存在。
你可以在这些行上写一些内容来使用CLISP上的内置函数和其他LISP上的homebrewn函数:
(in-package :my-package)
#+CLISP
(import 'ext:xor)
#-CLISP
(defun xor (&rest what)
;; your own xor implementation
...)
#+CLISP
(import 'ext:!)
#-CLISP
(defun ! (&rest what)
;; your own ! implementation
...)
答案 1 :(得分:3)
Xor
也位于alexandria中,但语义略有不同。
最好使用在可移植接口下封装特定于实现的行为的包装器库。这使您的代码更具可移植性,或者至少有助于使代码更具可移植性。