无法在 common-lisp SBCL 中设置 qtools
Can't set up qtools in common-lisp SBCL
我是 lisp 的初学者,我不知道如何正确使用 defpackage 加载 qtools(在 arch linux 上)。
为简单起见,如果我 运行 这个示例项目在 sbcl 中加载了 quicklisp
https://github.com/Shinmera/qtools/tree/master/examples/helloworld
出现此错误
While evaluating the form starting at line 8, column 0
of #P"/home/william/code/upol/lisp/helloworld/helloworld.lisp":
debugger invoked on a PACKAGE-DOES-NOT-EXIST in thread
#<THREAD "main thread" RUNNING {1000508083}>:
The name "CL+QT" does not designate any package.
为什么 "cl+qt" 没有被任何带有 quickload 的安装包提供?
这是已安装软件包的列表
$ ls ~/.quicklisp/dists/quicklisp/software
感谢帮助
我的资源:
https://github.com/Shinmera/qtools
https://lispcookbook.github.io/cl-cookbook/getting-started.html
您需要安装qtools
系统。
- 系统是组织软件库的一种方式
- 一个包就是一个命名空间
两者理论上没有关联。但是通常,当您加载系统 X 时,它会定义一个名为 X 的包。
在某些情况下(如qtools)一个系统有多个包,例如因为系统要定义不同级别的API.
加载一个系统时定义多个包的另一种方法来自 ASDF version 3.1 supports an extension copied from other build systems named package-inferred-systems,其中每个源文件都隐式映射到一个系统和一个包。
这是安装 qtools
时 Quicklisp 显示的片段:
* (ql:quickload :qtools)
To load "qtools":
Load 14 ASDF systems:
array-utils asdf bordeaux-threads cffi cl-ppcre
closer-mop dissect documentation-utils form-fiddle
named-readtables qt+libs trivial-features
trivial-garbage trivial-indent
... ... ...
To load "qtools":
Load 1 ASDF system:
qtools
; Loading "qtools"
[package uiop/package]............................
..................................................
[package cffi-sys]................................
[package cffi]....................................
..................................................
[package cffi-features]...........................
[package qt-libs].................................
[package qt]......................................
..................................................
[package deploy]..................................
[package dissect].................................
[package simple-tasks]............................
[package trivial-main-thread].....................
[package qtools]..................................
[package cl+qt]...................................
.............................
(:QTOOLS)
Quicklisp 能够在定义新包时拦截并打印它们。上面我们可以看到在加载 quicklisp 时定义了多个包,要么是 (1) 由 qtools 的依赖项定义的包,要么 (2) 由 qtools 定义的包 本身。这里qtools
和cl+qt
都是qtools系统定义的包。
包没有在系统中声明,因此您需要依靠文档来了解系统定义了哪些包。
我们来看例子。动作顺序为:
- 编译 .asd 文件(例如,使用
C-c C-k
)。这将创建 qtools-helloworld system.
- 加载 "qtools-helloworld" 及其与 Quicklisp 的依赖关系:
(ql:quickload :qtools-helloworld)
.
- 编译helloworld.lisp(再次使用
C-c C-k
),并调用它的函数。
此外,请查看 Qtools 自述文件:https://github.com/Shinmera/qtools#qtools-1 它说要安装这 3 个库:
(ql:quickload '(qtools qtcore qtgui))
cl+qt
软件包由这些 系统 之一提供。
更新:从命令行运行 helloworld 所需的步骤ps 是:
- 加载 asd 定义:
rlwrap sbcl --load qtools-helloworld.asd
。 (rlwrap 只是一个 readline 实用程序)
- 您已进入 Lisp REPL。现在我们使用 Quicklisp 安装依赖项,您必须先安装这些依赖项。你在 Lisp REPL 中输入:
(ql:quickload :qtools-helloworld)
。那就是asd中定义的名字。
- 现在你可以编译 .lisp 文件了:
(load "helloworld.lisp)
:
* (ql:quickload :qtools-helloworld)
To load "qtools-helloworld":
Load 1 ASDF system:
qtools-helloworld
; Loading "qtools-helloworld"
[package qtools-helloworld]....
(:QTOOLS-HELLOWORLD)
它没有显示 GUI。我们将调用 main
函数:
- (qtools-helloworld::main)
你应该看到这个例子。如果您对 lisp 文件进行了更改,则可以重新加载它。在终端中使用 REPL 是可行的,但不像 Lisp 那样具有交互性(远非如此)。您希望您的编辑器连接到 REPL 并通过按键自动发送更改。
查看 Cookbook 的编辑部分,SLIMA 对 Atom 的支持非常好。
ps:我觉得Qtools有点难,通过了运行提供的例子。它不像其他 GUI(如 Ltk 或 IUP)那样容易被发现。希望你能证明我是错的。
pps: 也 https://lispcookbook.github.io/cl-cookbook/gui.html#qt4
我是 lisp 的初学者,我不知道如何正确使用 defpackage 加载 qtools(在 arch linux 上)。 为简单起见,如果我 运行 这个示例项目在 sbcl 中加载了 quicklisp https://github.com/Shinmera/qtools/tree/master/examples/helloworld 出现此错误
While evaluating the form starting at line 8, column 0
of #P"/home/william/code/upol/lisp/helloworld/helloworld.lisp":
debugger invoked on a PACKAGE-DOES-NOT-EXIST in thread
#<THREAD "main thread" RUNNING {1000508083}>:
The name "CL+QT" does not designate any package.
为什么 "cl+qt" 没有被任何带有 quickload 的安装包提供? 这是已安装软件包的列表 $ ls ~/.quicklisp/dists/quicklisp/software
感谢帮助
我的资源:
https://github.com/Shinmera/qtools
https://lispcookbook.github.io/cl-cookbook/getting-started.html
您需要安装qtools
系统。
- 系统是组织软件库的一种方式
- 一个包就是一个命名空间
两者理论上没有关联。但是通常,当您加载系统 X 时,它会定义一个名为 X 的包。
在某些情况下(如qtools)一个系统有多个包,例如因为系统要定义不同级别的API.
加载一个系统时定义多个包的另一种方法来自 ASDF version 3.1 supports an extension copied from other build systems named package-inferred-systems,其中每个源文件都隐式映射到一个系统和一个包。
这是安装 qtools
时 Quicklisp 显示的片段:
* (ql:quickload :qtools)
To load "qtools":
Load 14 ASDF systems:
array-utils asdf bordeaux-threads cffi cl-ppcre
closer-mop dissect documentation-utils form-fiddle
named-readtables qt+libs trivial-features
trivial-garbage trivial-indent
... ... ...
To load "qtools":
Load 1 ASDF system:
qtools
; Loading "qtools"
[package uiop/package]............................
..................................................
[package cffi-sys]................................
[package cffi]....................................
..................................................
[package cffi-features]...........................
[package qt-libs].................................
[package qt]......................................
..................................................
[package deploy]..................................
[package dissect].................................
[package simple-tasks]............................
[package trivial-main-thread].....................
[package qtools]..................................
[package cl+qt]...................................
.............................
(:QTOOLS)
Quicklisp 能够在定义新包时拦截并打印它们。上面我们可以看到在加载 quicklisp 时定义了多个包,要么是 (1) 由 qtools 的依赖项定义的包,要么 (2) 由 qtools 定义的包 本身。这里qtools
和cl+qt
都是qtools系统定义的包。
包没有在系统中声明,因此您需要依靠文档来了解系统定义了哪些包。
我们来看例子。动作顺序为:
- 编译 .asd 文件(例如,使用
C-c C-k
)。这将创建 qtools-helloworld system. - 加载 "qtools-helloworld" 及其与 Quicklisp 的依赖关系:
(ql:quickload :qtools-helloworld)
. - 编译helloworld.lisp(再次使用
C-c C-k
),并调用它的函数。
此外,请查看 Qtools 自述文件:https://github.com/Shinmera/qtools#qtools-1 它说要安装这 3 个库:
(ql:quickload '(qtools qtcore qtgui))
cl+qt
软件包由这些 系统 之一提供。
更新:从命令行运行 helloworld 所需的步骤ps 是:
- 加载 asd 定义:
rlwrap sbcl --load qtools-helloworld.asd
。 (rlwrap 只是一个 readline 实用程序) - 您已进入 Lisp REPL。现在我们使用 Quicklisp 安装依赖项,您必须先安装这些依赖项。你在 Lisp REPL 中输入:
(ql:quickload :qtools-helloworld)
。那就是asd中定义的名字。 - 现在你可以编译 .lisp 文件了:
(load "helloworld.lisp)
:
* (ql:quickload :qtools-helloworld)
To load "qtools-helloworld":
Load 1 ASDF system:
qtools-helloworld
; Loading "qtools-helloworld"
[package qtools-helloworld]....
(:QTOOLS-HELLOWORLD)
它没有显示 GUI。我们将调用
main
函数:- (qtools-helloworld::main)
你应该看到这个例子。如果您对 lisp 文件进行了更改,则可以重新加载它。在终端中使用 REPL 是可行的,但不像 Lisp 那样具有交互性(远非如此)。您希望您的编辑器连接到 REPL 并通过按键自动发送更改。
查看 Cookbook 的编辑部分,SLIMA 对 Atom 的支持非常好。
ps:我觉得Qtools有点难,通过了运行提供的例子。它不像其他 GUI(如 Ltk 或 IUP)那样容易被发现。希望你能证明我是错的。
pps: 也 https://lispcookbook.github.io/cl-cookbook/gui.html#qt4