我使用 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/