如何定义和使用 Common Lisp 包(库)?

2024-04-07

我在几个 Lisp 源文件中开发了一些 Common Lisp 函数,我希望这些函数可以轻松地供我编写的其他函数使用,或者如果我认为它们对其他人有用的话,可以在 github 上提供。现在,我只是将它们放在一些预定义的文件夹中并使用(require "/path/to/my/modules/module.lisp").

我想了解定义 Lisp 模块库的正确(规范 Lisp)方法是什么。问题的第二部分是如何使用它们(我是否定义了它们,或者我是否从其他人那里获得了它们)。

我读了很多关于defpackage and defsystem and asdf。但我读到的所有内容似乎都集中在这项任务的某些特定角落。我在了解自定义模块创建、部署和使用的总体情况时遇到了很多困难。因此,假设我面前有 Lisp 环境(CLISP 或 SBCL)以及一个或多个.lisp我想要制作一个包或库的文件,是否有文档解释了执行此操作所需的步骤?这可能是我已经读过的东西,但由于不理解上下文而没有跟踪。我读到的有关 ASDF 的内容似乎在功能上就是我所追求的,但我不明白 ASDF 是否是我唯一的选择,或者它是否只是碰巧是一个de facto标准以及大多数其他人使用的东西,或者其他什么。我在 SBCL 中玩了一下,不确定我是否正确使用它,也没有看到有关如何在 CLISP 中设置它的信息。所以我想了解完成这项任务的中间、普通方法是什么。

我知道这是一大堆草率的子问题。再说一次,如果有一些好的参考资料可供参考,我可以阅读。我只是在全面了解它应该如何工作,以及是否有任何“最佳”方法,或者在 Lisp 中是否有点像“狂野西部”选择库时遇到了一些麻烦-经理-你喜欢这种方法。我用谷歌搜索并阅读了任何看起来相关的内容,但我的大脑因所有这些而旋转。

Thanks.


A system是文件和子系统的集合。可以编译或加载这样一个system。还可以进行其他操作。它跟踪依赖关系并尝试做最少的工作。

如果您使用 SBCL 和 CLISP,那么ASDF是要选择的工具。看http://www.cliki.net/asdf http://www.cliki.net/asdf

ASDF除其他外,还提供DEFSYSTEM宏来描述此类系统。

不要使用PROVIDE/ REQUIRE- 除非你知道自己在做什么。ASDF是要走的路。

要发布您的代码并使其易于被其他人加载,然后使用快速显示. See: http://www.quicklisp.org/beta/ http://www.quicklisp.org/beta/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何定义和使用 Common Lisp 包(库)? 的相关文章

  • 在 netbeans 中创建/访问库

    我是新的 netbeans 用户 在导入用户创建的库时遇到问题 我创建了一个名为 MyLibrary 的库 然后 我将一个包含我保存的项目 名为 netbeansProjects 的文件夹添加到类路径中 该文件夹是我在 netbeans I
  • 如何在 Octave 中永久加载包?

    我在 Windows vista 上使用 Octave 我在代码中使用 4 个包 但是每次我重新启动八度音程时 我都必须从命令行手动加载 pkg load 有没有办法永久加载它们 以便每当 Octave 启动时它都会在其路径中找到它们 当
  • 在 Lisp 解释过程中,“读者”的任务是什么?

    我想知道 读者 在解释 编译 Lisp 程序期间的目的 或者更准确地说 是 读者 的任务 从我刚刚完成的问题前研究来看 在我看来 读者 特别是本例中的 Clojure 可以被视为 语法预处理器 它的主要职责是读取器宏和原始形式的扩展 所以
  • 我应该在 Common Lisp 中使用哪些正则表达式库? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • LISP 中的变量和符号有什么区别?

    从范围上来说 内存中的实际实现 语法 例如 if let a 1 a 是变量还是符号 约尔格的回答指出了正确的方向 让我补充一点 我将讨论与 Common Lisp 类似的 Lisp 作为数据结构的符号 符号是 Lisp 中真实的数据结构
  • Java 包结构中的模块与层

    我曾经把所有东西都放在这样的包中 com company app module1 com company app module2 但它使得基于包的 AOP 切入点变得困难 并导致需要 IDE 才能理解的巨大包 所以现在我意识到我需要一个更深
  • 为什么在基于 Lisp 的语言中习惯上将许多右括号放在一行上?

    通常代码如下所示 one thing another thing arg1 f arg5 r another thing arg1 f arg5 r 为什么不喜欢这样 one thing another thing arg1 f arg5
  • 导入 matplotlib 时 numpy 的版本错误

    When I import matplotlib 我没有收到任何错误 但是当我 import matplotlib pyplot I get RuntimeError module compiled against API version
  • 人们可以放心地忽略宏和内置宏之间的区别吗?

    我从 Clojure 开始 这也是我的第一个 lisp 显然有很多东西需要吸收 为了减轻认知负担 我尝试找到我可以安全地忽略的部分 目前 人们能否安全地以相同的方式处理带有宏的表单和带有内置函数的表单 或者是否会出现以后出现的陷阱 换句话说
  • 使用“npm install”的漏洞问题

    我已经使用安装了一个快速服务器express coserver命令 然后我使用 npm install 命令来安装其他节点包 依赖项 但我得到了这个结果 npm audit security report Manual Review Som
  • 用通用函数替换普通函数

    我想将 elt nth 和 mapcar 等名称与我正在原型设计的新数据结构一起使用 但这些名称指定普通函数 因此我认为需要将其重新定义为通用函数 重新定义这些名称可能是一种不好的形式 有没有办法告诉 defgeneric 不要生成程序错误
  • 创建流而无需从中创建物理文件

    我需要创建一个包含服务器上存在的文档的 zip 文件 我使用 Net Package 类来执行此操作 并创建一个新的 Package 即 zip 文件 我必须具有物理文件或流的路径 我试图不创建一个实际的 zip 文件 而是创建一个存在于内
  • R - 安装插入符号包时出错

    gt Error in loadNamespace j lt i 1L c lib loc libPaths gt versionCheck vI j namespace pbkrtest 0 4 2 is being gt loaded
  • Common Lisp 鼠标位置与 ltk

    我正在 Common Lisp 中制作一个简单的小程序 我想使用鼠标移动来控制它 我用 LTK 作为窗口 我找不到任何可以检索鼠标位置的函数 例如 Emacs Lisp 有 鼠标像素位置 我发现这在罗塞塔代码上 https rosettac
  • 在Emacs中,这个错误是什么意思? “警告:运行时需要 cl 包”

    我正在字节编译一个模块 它给了我这个警告 Warning cl package required at runtime 为什么这是一个警告 我很清楚我正在使用cl包裹 事实上有一个 require cl 模块中的语句 使用有什么问题吗cl
  • Matlab:在类中导入函数

    我在 Matlab 中有一个类文件 我使用包规范创建了 i 目录结构 MyPkg F1 F2 F3 fun m myc m 我的班级是myc并将其插入包装中MyPkg 一个功能fun保存在子包中F3在主要的一处 我想使用函数fun在我的课堂
  • 为什么源码中的根包叫“com”? [复制]

    这个问题在这里已经有答案了 在大多数源代码中 根包 文件夹被命名为 com 为什么会这样 它只是约定俗成还是代表着什么 The 习俗 http download oracle com javase tutorial java package
  • Scheme/Lisp 嵌套循环和递归

    我正在尝试解决方案中的一个问题 该问题要求我使用嵌套循环或嵌套递归 例如我有两个列表 我必须检查它们的笛卡尔积的条件 解决这些类型问题的最佳方法是什么 有关如何简化这些类型的函数的任何指示吗 I ll elaborate a bit sin
  • go:找到模块但不包含包

    我正在尝试安装 go 的网络包 但收到 不包含包错误 终端截图 我咨询过 go 模块 latest 已找到但不包含包 https stackoverflow com questions 62974985 go module latest f
  • Golang 中的“相互”包导入

    是否可以在 Golang 中执行 相互 包导入之类的操作 举例来说 我有两个包 A 和 B 分别具有 AFunc 和 BFunc BFunc2 函数 package A import B func AFunc do stuff but al

随机推荐

  • 将多个 DbContext 与通用存储库和工作单元结合使用

    我的应用程序变得越来越大 到目前为止我只有一个MyDbContext其中包含我的应用程序中所需的所有表格 我希望 为了概述 将它们分成多个DbContext like MainDbContext EstateModuleDbContext
  • gruntjs 加载外部配置

    嘿 咕噜大师们 我想将外部配置文件加载到 grunt 中 以便我可以执行以下操作 grunt dev homepage 它会加载homepage config json 然后运行watch grunt dev contact 它会加载con
  • Python 中 doxygen 风格文档字符串的 Vim 语法高亮显示

    我开始与doxygen生成我的 Python 代码的文档 我用doxypy过滤器来预处理 Python 文档字符串 我的目标是在 Python 中对 doxygen 注释进行良好的语法突出显示 当写我的mainpage在专用的 dox 文件
  • RewriteMap 激活

    如何在apache中激活RewriteMap 当我重新启动 apache 时 我尝试在 httpd 配置中运行 rewritemap 它说 此处不允许 RewriteMap 我尝试用谷歌搜索并访问apache 但找不到激活它的方法 有人知道
  • Bash 读取命令在循环外不起作用

    我一定错过了一些关于 Bash read 命令的非常基本的东西 在 shell 提示符下 无法将三个输入字段分配给相应的变量 echo a b c read x1 x2 x3 echo x1 x2 x3 这虽然有效 echo a b c w
  • Objective C sqlite3问题

    我发现在 iPhone 应用程序中更新 插入表格时遇到问题 因为我有一个文本列 当该文本包含 符号时 事情就会变得混乱 处理这个问题的最佳方法是什么 在使用带有撇号的字符串之前我应该 检查吗 有没有一种快速添加格式的方法 可以在每个撇号前面
  • actionPerformed 中的线程睡眠

    我正在尝试制作一个有 3 个按钮的小程序 所有按钮都是白色的 按下第一个按钮 带有文字 开始 将使第二个按钮变为橙色 3 秒钟 然后 在此时间之后 它将再次变为白色 而第三个按钮将永久变为绿色 然而 在我的下面的代码中 我在实现这一点时遇到
  • 将函数指针作为参数传递给 dll 函数并从 dll 内部调用它们是否安全?

    我想将一些 无论是否为 dll 函数指针作为参数传递给一些 dll 函数 并从 dll 内部调用它们 我想知道它是否安全 因为我找到了有关的信息http publib boulder ibm com infocenter zos v1r10
  • 如何在 iOS Swift 4 中检测屏幕锁定/解锁?

    如何在 iOS 中检测屏幕锁定 解锁 我正在使用 Swift 4 Xcode 9 2 并且我尝试过以下链接 但它们对我不起作用 iOS swift 3 检测到屏幕解锁失败 https stackoverflow com questions
  • C99 指定初始化程序重复索引在构建输出或 lint 中根本未标记

    前几天我玩了一下指定的初始化器 令我惊讶的是 多次使用相同的索引是有效的 更重要的是 当我这样做时 它甚至没有产生编译器警告 错误 甚至信息语句 甚至 PC Lint 似乎也不关心 我认为这最让我惊讶 我想知道在这种情况下编译器是否有原因甚
  • 对强连通图的最小添加

    我有一组节点和它们之间的一组有向边 边缘没有重量 如何找到必须添加的最小数量的边以使图强连接 即应该有一条从每个节点到所有其他节点的路径 这个问题有名字吗 这是一个非常经典的图问题 运行类似 Tarjan SCC 算法的算法来查找所有 SC
  • 两条线之间的角度错误

    我想得到两条线之间的角度 所以我使用了这段代码 int posX ScreenWidth gt gt 1 int posY ScreenHeight gt gt 1 double radians degrees radians atan2f
  • 用python计算梯度

    我想知道如何numpy gradient工作 我用梯度来尝试计算群速度 波包的群速度是频率相对于波数的导数 而不是一组速度 我向它提供了一个 3 列数组 前 2 列是 x 和 y 坐标 第三列是该点 x y 的频率 我需要计算梯度 我确实期
  • Git 致命:远程端挂起

    所以我以为我终于在 Windows 上完成了所有设置 然后遇到了这个问题 当前设置 网址 ssh user host port myapp git 已经运行 Putty 并且可以通过 ssh authorized keys 直接使用有效的
  • Firebase 如何处理长整型和双精度型?

    Firebase Java API 指定 Long 是传递给 setValue 的有效类型 JavaScript 只支持单一数字类型 相当于 Java 的 double 因此 如果我从 JavaScript 插入一个数字并稍后从 Java
  • 我可以在应用程序运行时以编程方式翻转 Info.plist 值吗?

    我有兴趣使用SBUsesNetwork and UIRequiresPersistentWiFi我的应用程序中的密钥 但是 我想仅在使用一组特定的视图控制器时启用它们 有没有办法在应用程序运行时以编程方式翻转这些键值 您无法在运行时修改捆绑
  • Boost Python 没有 to_python for std::unique_ptr

    我有一个无法解决的 boost python 问题 我试图公开一个包含返回函数的类std unique ptr 签名看起来像 std unique ptr
  • 在 pygame 物理模拟中添加 wxPython GUI 元素

    我做了一个pygame物理模拟 抛射运动 但它缺乏交互性 比如接受发射角度 速度等 我想添加带有增加 减少箭头的输入框 但不知道如何去做 谢谢您的帮助 也许你可以尝试PGU http www pygame org project 108 菲
  • Java 无法通过 JDBC-ODBC 从 Access 检索 Unicode(立陶宛语)字母

    我有数据库 其中一些名称是用立陶宛字母写的 但是当我尝试使用 java 获取它们时 它会忽略立陶宛字母 DbConnection zadanie connect createStatement ResultSet TYPE SCROLL I
  • 如何定义和使用 Common Lisp 包(库)?

    我在几个 Lisp 源文件中开发了一些 Common Lisp 函数 我希望这些函数可以轻松地供我编写的其他函数使用 或者如果我认为它们对其他人有用的话 可以在 github 上提供 现在 我只是将它们放在一些预定义的文件夹中并使用 req