【问题标题】:Import from cl-user package从 cl-user 包导入
【发布时间】:2014-06-18 11:25:50
【问题描述】:

cl-user 包中导入一些东西是个好主意吗?据我所知,这个包的内容并没有被标准规定,那么从cl-user包导入函数会破坏程序的兼容性吗?例如,我使用 GNU CLISP,我想在我的程序中使用 xor! 函数,我已经从 cl-user 包中导入了它们,但我怎么知道其他实现也包含这些函数?有什么约定吗?

【问题讨论】:

    标签: lisp package common-lisp conventions


    【解决方案1】:

    在 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
      ...)
    

    【讨论】:

    • 嗯..似乎我可能总是只使用我自己的这些函数的实现,编写更少的代码。
    【解决方案2】:

    Xor 也在alexandria 中,但语义略有不同。

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

    【讨论】:

      猜你喜欢
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      相关资源
      最近更新 更多