【问题标题】:External vs Internal Symbols in Common Lisp PackageCommon Lisp 包中的外部符号与内部符号
【发布时间】:2017-12-12 22:28:50
【问题描述】:

在 Common Lisp 包的上下文中,它们之间有什么区别?我正在阅读 SLIME 文档,一些命令广泛地提到了这一点。

【问题讨论】:

    标签: package lisp common-lisp sbcl


    【解决方案1】:

    语法是什么?你export 的符号是外部的。

    (in-package :cl-user)
    (defpackage str
      (:use :cl)
      (:export
       :trim-left
       ))
    
    (in-package :str)
    
    ;; exported: can be accessed with `str:trim-left`.
    (defun trim-left (s)
      "Remove whitespaces at the beginning of s. "
      (string-left-trim *whitespaces* s))
    
    ;; forgot to export: can still access it with `str::trim-right`.
    (defun trim-right (s)
      "Remove whitespaces at the end of s."
      (string-right-trim *whitespaces* s))
    

    【讨论】:

      【解决方案2】:

      Common Lisp 包的作者可以为包的用户导出符号。那么这个符号就是一个外部符号,你可以用package-name:external-symbol-name来访问它。

      内部符号不是供用户使用的,但可以通过package-name::symbol-name 访问

      更多解释在Peter Seibel's bookCommon Lisp the Language

      【讨论】:

      • 在包中声明这些的语法是什么?
      • Peter Seibel 的书中关于包的章节中有一个示例(我在答案中添加了链接) P.s.:我也是一个疯狂的物理学家。你在生气什么?
      • 很多东西......学术界的状态、团队的想法、量子力学等等。你呢?
      • 主要是我自己,但不要让我开始了解量子物理学。那些该死的粒子永远无法下定决心!
      • 我认为是物理学家没有下定决心;)
      猜你喜欢
      • 2020-05-15
      • 2012-04-02
      • 2020-01-07
      • 2019-09-28
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      相关资源
      最近更新 更多