gpt4 book ai didi

emacs - Common Lisp : How to get (in-package . ..) 在 Emacs Slime 中工作

转载 作者:行者123 更新时间:2023-12-04 12:07:16 25 4
gpt4 key购买 nike

64 位 Windows 7
Clozure Common Lisp 版本 1.9 WindowsX8632
Emacs 24.3.1
史莱姆更新日志日期 2014-06-17

我有一个示例 .lisp 文件,其开头如下:

(ql:quickload 'qt)
(in-package "QT")

程序的其余部分显示一个对话框。
当我从命令行运行它时, wx86cl -load helloqt.lisp它似乎工作正常。
当我从 Emacs Slime ( C-x C-k ) 运行它时,它说没有包“QT”。
但是,如果我首先单独评估第一行( C-x C-e ),那么我可以编译整个内容并且它可以工作,模数尝试从 Windows 上的 Slime 中运行 QT 线程的正常问题。

如何制作它以便我可以从 emacs 编译/运行文件而不必首先手动评估第一行?

另外,为什么不 (in-package ...)在 Slime session 中更改当前包?如果我想与包内容交互,我必须手动更改它。

最佳答案

将文件作为一个整体编译时,首先将其作为一个整体读取。当时还没有评估,所以包QT尚未定义。

您可以使用 eval-when在较早的时间评估某些内容,或使用系统定义工具(ASDF 现在占主导地位)以正确的顺序加载您的系统。
Eval-when :

(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload '#:qt))

(in-package #:qt)

请注意,您通常不应该在库包中乱搞,而是定义自己的新包来保存代码:
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload '#:qt))

(defpackage #:qt-example
(:use #:qt))

(in-package #:qt-example)

;; your code here

(如果您想知道, defpackagedefundefclass 等是专门设计的宏,可扩展为这样的形式 eval-when 。)

对于一次性的小脚本来说,这有时是可以的。对于任何值得注意的大小的系统,尤其是当它们有多个源文件时,请使用 ASDF:
;;;; qt-example.asd

(in-package #:cl-user)

(asdf:defsystem #:qt-experiments
:description "Some experiments with QT."
:serial t
:components ((:file "package")
(:file "qt-example"))
:depends-on (#:qt))

;;;; package.lisp

(defpackage #:qt-example
(:use #:qt))

;;;; qt-example.lisp

(in-package #:qt-example)

ASDF 带有大多数开源 Common Lisp 实现。您可能需要设置 ASDF 注册表。我喜欢为所有本地项目设置一两个基本目录,这样我就可以将以下内容放入 ~/.config/common-lisp/source-registry.conf :
(:source-registry
(:tree (:home "devel"))
(:tree (:home "src"))
:inherit-configuration)

然后 ASDF 查找在这些目录下定义的所有系统。在 SLIME 中,你可以使用 ,load-system,open-system从带有系统名称的 REPL 加载它,resp。打开其中的所有文件,可选择加载它。

从文件编译单个顶级表单(使用 C-c C-c )时,SLIME 从那里向后查找 in-package表格以找出它应该采用的包。按照惯例,您应该只有一个 in-package每个文件的表格,在其顶部。

一个常用的快捷方式是 C-c ~在 Lisp 源文件中,它将 REPL 切换到文件所在的目录和有效包。

关于emacs - Common Lisp : How to get (in-package . ..) 在 Emacs Slime 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27095320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com