调用另一个 lisp 文件中的函数

2024-02-11

我必须用 Lisp 写一个游戏。为了清楚起见,我想将代码拆分到不同的 .lisp 文件中。

如何从另一个文件中的函数中调用函数?

例如。 file1.lisp 有一个名为 function1 的函数,file2.lisp 有一个名为 function2 的函数。 如何从 function1 中调用 function2 ?

Thanks!


正如您所知,有多种不同的 Lisp 系统。我将发布 Common Lisp 的答案。

天真的方法是使用(load "filename.lisp"),但是一段时间后效果就不太好了。所以...

Common Lisp 有一个名为“ASDF”的库,用于处理打包和文件管理。 ASDF 有一些设置。

  1. 创建 ASDF 查找文件的目录。
  2. 将此信息添加到我的 Lisp 系统的 init 文件中。

我在我的.sbclrc文件(假设我在 ~ 中创建了一个 .asdf 文件):

(pushnew "~/.asdf/" asdf:*central-registry* :test #'equal)

我通常使用之前构建的 ASDF 文件,然后对其进行修改。

以下是示例 ASDF 文件的内容:

(asdf:defsystem #:cl-linq
  :depends-on ( #:alexandria #:anaphora)
  :components ((:file "cl-linq"))
  :name "cl-linq"
  :version "0.1"
  :maintainer "Paul Nathan"
  :author "Paul Nathan"
  :licence "LLGPL"
  :description "CL LINQ style interface with strains of SQL"
  :long-description
  "DSL for managing and querying datasets in a SQL/LINQ style
syntax. cl-linq provides a simple and usable set of primitives to
make data examination straightforward. ")

我把这段代码放在一个文件中cl-linq.asd在我的源代码旁边(cl-linq.lisp从组件"cl-linq"在 defsystem 中),然后符号链接cl-linq.asd文件到我的~/.asdf/目录。

在我的 cl-linq.lisp 文件中,我包含以下内容:

(defpackage :cl-linq
  (:use
   :common-lisp
   :anaphora)
  (:export
   #:query
   #:cl-linq-select))
(in-package :cl-linq)

所以对于你的情况,我有两个组件;每个包都有自己的 defpackage 形式,导出另一个包所需的函数。

对于示例,我从以下位置获取了代码CL-LINQ https://github.com/pnathan/cl-linq,我的一个项目。您可以非常自由地使用它作为模板。

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

调用另一个 lisp 文件中的函数 的相关文章

  • Emacs - 调用时出错(服务器启动)

    我目前在 Windows Vista SP1 中使用 GNU Emacs 23 0 93 1 在我的 emacs 文件中 我调用 server start 这导致消息错误目录 emacs d server 不安全 有没有人见过这个并知道修复
  • 如何使用 emacs/elisp 获取当前缓冲区信息的开始/结束?

    我有以下代码运行以范围输入的Figlet 如何修改此代码以检查 b 或 e 是否未指定 使 b 位于当前缓冲区的开头 e 位于当前缓冲区的结尾 defun figlet region optional b e interactive r s
  • 如何让 Emacs 在保存文件时创建中间目录?

    有没有办法在 emacs 中创建文件夹树 类似于 mkdir p in bash 基本上 我希望 emacs 创建所有中间模具 如果它们不存在 当我保存文件时 功能make directory这样做 您的具体问题可能会这样解决 add ho
  • 如何告诉 emacs 以 C++ 模式打开 .h 文件?

    我应该向 emacs 在 Windows 上 文件中添加哪些行 以使其以 C 模式打开 h 文件 默认为C模式 尝试这个 add to list auto mode alist h c mode 每当您打开 h 文件时 都会使用 C 模式
  • Emacs 找不到 Flyspell/ispell

    在我的 Mac Snow Leopard 10 6 8 上 我使用的是 Emacs 24 2 的修改版本此处提供 http vgoulet act ulaval ca en emacs mac 利用 Emacs Speaks Statist
  • 人们可以放心地忽略宏和内置宏之间的区别吗?

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

    例如 我有这个包定义 它遮蔽了 COMMON LISP LISTEN defpackage shadows use common lisp shadow listen export listen 然后我想使用另一个包中的这个包 比如说 de
  • Common Lisp 鼠标位置与 ltk

    我正在 Common Lisp 中制作一个简单的小程序 我想使用鼠标移动来控制它 我用 LTK 作为窗口 我找不到任何可以检索鼠标位置的函数 例如 Emacs Lisp 有 鼠标像素位置 我发现这在罗塞塔代码上 https rosettac
  • 有没有一种简单的方法可以使用 Common Lisp 中的 Python 库?

    在编写 Common Lisp 代码时我真正怀念的一件事是访问 Python 库 包括标准库和第三方模块 CLPython 提供了 Python 功能的有限子集 这阻止了大多数库的使用 因此这对我来说并不是很有用 我希望能够从 Common
  • 在Emacs中,这个错误是什么意思? “警告:运行时需要 cl 包”

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

    以下代码从文件加载 html 内容 我使用这个线程 https stackoverflow com questions 168963 stop jquery load response from being cached
  • 如何在emacs中获取顶部和底部边距[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 使用 emacs 时如何获得顶部和底部边距 如左右边缘 我发现当我编写或审阅大块文本时 让文本从屏幕顶部开始有点不舒服 我找不到仅顶部和底部边距设置
  • Emacs 邪恶模式:如何创建一个新的文本对象来选择带有任何非空格字符的单词?

    我正在尝试在 Evil 中创建一个新的文本对象 例如 文本对象iw只会选择包含连字符的字符串子集 我希望新的文本对象能够将单词与任何非空格字符相匹配 到目前为止我得到的是 evil define text object evil inner
  • 在页面加载之前运行 JavaScript 函数(设置适当大小的背景)

    我有一个图像背景 无论用户的分辨率是多少 我都希望其内容始终可见 因此 我希望能够在一开始就在页面加载之前确定分辨率并设置适当的背景图像文件 有可能吗 您可以运行可访问 DOM 的 Javascript 函数 无需等待页面加载 的最早点是放
  • 如何从 ispell 私人词典中删除条目?

    我想知道如何从 ispell 私人词典中删除一个 错误插入的 条目 单词 EDIT 经过更多挖掘后 我仍然无法从默认字典中删除条目 但我认为解决方案可能是构建哈希程序 问题是生成要删除的条目列表 我找不到简单的示例 您应该能够编辑您的个人词
  • Emacs 关于 python 模式函数的默认提示

    在 python 模式下 有一个名为 py execute region 的函数 它将突出显示的代码区域发送到 Python 缓冲区进行评估 评估后 光标位于 Python 缓冲区中 但我希望它保留在脚本缓冲区中 以便我可以继续生成更多代码
  • windows下无法用emacs + sbcl启动slime

    我想配置我的 emacs 以使用 SLIME 和 SBCL emacs 文件如下所示 add to list load path D app slime setq inferior lisp program sbcl require sli
  • Lisp 格式和强制输出

    我不明白为什么这段代码在不同的实现中表现不同 format t asdf setq var read 在 CLISP 中 它的行为与预期一致 先打印提示 然后读取 但在 SBCL 中 它显示 then输出 我在网上查了一下 修改了一下 fo
  • 如何配置 Firefox 在某些链接上运行 emacsclientw?

    我有一个 Perl 脚本 它会在一堆日志文件中查找 有趣 的行 以获取一些有趣的定义 它生成一个 HTML 文件 其中包含一个表 该表的列是时间戳 文件名 行号引用和 有趣 位 我想做的是让文件名 行号成为一个实际的链接 它将在 emacs
  • 如何更改 emacs 上的光标颜色

    我对 Emacs 的颜色做了一些更改 现在唯一的问题是光标在黑色背景上为黑色 我必须更改它 我该怎么办 如果您运行的是最新版本的 emacs 您可以使用 Set cursor color to white set cursor color

随机推荐