【发布时间】:2014-06-18 11:25:50
【问题描述】:
从cl-user 包中导入一些东西是个好主意吗?据我所知,这个包的内容并没有被标准规定,那么从cl-user包导入函数会破坏程序的兼容性吗?例如,我使用 GNU CLISP,我想在我的程序中使用 xor 和 ! 函数,我已经从 cl-user 包中导入了它们,但我怎么知道其他实现也包含这些函数?有什么约定吗?
【问题讨论】:
标签: lisp package common-lisp conventions
从cl-user 包中导入一些东西是个好主意吗?据我所知,这个包的内容并没有被标准规定,那么从cl-user包导入函数会破坏程序的兼容性吗?例如,我使用 GNU CLISP,我想在我的程序中使用 xor 和 ! 函数,我已经从 cl-user 包中导入了它们,但我怎么知道其他实现也包含这些函数?有什么约定吗?
【问题讨论】:
标签: lisp package common-lisp conventions
在 CLISP 上,xor 和 ! 都是 EXT 包的外部组件,而不是 CL-USER。它们不是标准函数,因此在编写可移植代码时不能依赖它们的存在。
您可以按照这些思路编写一些内容,以使用 CLISP 上的内置函数和其他 LISP 上的自制函数:
(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
...)
【讨论】:
Xor 也在alexandria 中,但语义略有不同。
使用将特定于实现的行为封装在可移植接口下的包装库是一个好主意。这使您的代码更具可移植性,或者至少有助于使其更具可移植性。
【讨论】: