lisp - ltk 的问题(普通 lisp)

标签 lisp common-lisp asdf ltk

我使用 asdf-install 将 ltk 安装到 Steel Bank Common Lisp,但我什至无法开始使用它 V_V。下面的代码是文档中最简单的示例,几乎是逐字复制的。


(asdf:operate 'asdf:load-op :ltk)

(defun hello-1()
  (with-ltk ()
   (let ((b (make-instance 'button
                           :master nil
                           :text "Press Me"
                           :command (lambda ()
                                      (format t "Hello World!~&")))))
     (pack b))))
(hello-1)

这是我从 sbcl 得到的错误信息:


> ; in: LAMBDA NIL
;     (PACK B)
; 
; caught STYLE-WARNING:
;   undefined function: PACK

;     (WITH-LTK NIL
;      (LET ((B (MAKE-INSTANCE 'BUTTON :MASTER NIL :TEXT "Press Me" :COMMAND #)))
;        (PACK B)))
; 
; caught STYLE-WARNING:
;   undefined function: WITH-LTK
; 
; compilation unit finished
;   Undefined functions:
;     PACK WITH-LTK
;   caught 2 STYLE-WARNING conditions

debugger invoked on a SIMPLE-ERROR in thread #<THREAD "initial thread" RUNNING {1002A57B61}>:
  There is no class named BUTTON.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-PCL::FIND-CLASS-FROM-CELL BUTTON NIL T)

最佳答案

您必须将符号导入到您希望它在其中工作的包中。

通用的“用户”包是cl-user,一个“原始”图像会把你带到那里。为了从另一个包中导入(导出的)符号,发出 (use-package :another-package)。 REPL 示例:

(asdf:load-system :ltk)
(use-package :ltk)

有时想要使用未导入的符号。然后,您可以在它们前面加上包,例如 bar:foo,其中 bar 是包名称,foo 是符号。

在实际系统上工作时,您通常会为其定义一个或多个包。这是通过 defpackage 完成的,您可以告诉它要直接导入哪些其他包:

(defpackage #:my-app
  (:use :cl
        :ltk))

然后,你需要切换到那个包:

(in-package #:my-app)

当使用多个相互依赖的文件设置一个更复杂的系统时,系统定义工具就变得有值(value)了。目前使用最多的是ASDF ,尽管存在一些替代方案。

关于lisp - ltk 的问题(普通 lisp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443068/

相关文章:

list - 从 Lisp 列表中删除双元素

lambda - 我不明白为什么 lambda 方案有效

python - 需要帮助让 CLisp 将标准输入读入列表

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

package - 重新定义已删除的包 (Common Lisp)

RVM 或 ASDF 哪一个更适合管理不同的 ruby​​ 版本?

scheme - 顶级列表中所有数字的总和

scheme - Lisp 程序(使用 Scheme 48 1.9 解释器)找出级数 1^3 + 2^3 + … 的总和。 + n^3

lisp - 奇怪的 Lisp 引用场景 - Graham 的 On Lisp,第 37 页

macros - 有没有办法让宏在返回结果之前进行额外的评估?