从cl-user包导入

时间:2014-06-18 11:25:51

标签: lisp package common-lisp conventions

cl-user包中导入一些东西是个好主意吗?据我所知,这个包的内容没有由标准指定,从cl-user包中断函数导入是否与程序兼容?例如,我使用GNU CLISP,我想在我的程序中使用xor!函数,我已经从cl-user包中导入它们,但我怎么知道其他实现包含这些功能呢?是否有任何约定?

2 个答案:

答案 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中,但语义略有不同。

最好使用在可移植接口下封装特定于实现的行为的包装器库。这使您的代码更具可移植性,或者至少有助于使代码更具可移植性。