私は Lisp 初心者で、SBCL 1.0.55.0.debian と Limp 0.3.4 (およびそれが重要な場合は Debian Wheezy) を使用して、GUI プログラミング用の LTK を学習しながら、Lisp パッケージ システムを適切に使用する方法を理解しようとしています。aptitude パッケージ マネージャー (cl-asdf および cl-common-lisp-controller パッケージ) を使用して ASDF をインストールし、次に Quicklisp Web サイト ( http://www.quicklisp.org/beta/index.html )の手順を使用して Quicklisp をインストールしました。 (Debianリポジトリからではありません)そして(ql:quickload 'ltk)
、SBCLコンソールにLTKをインストールしました。
hello-1.lisp (LTKチュートリアルから直接):
(defun hello-1()
(with-ltk ()
(let ((b (make-instance ’button
:master nil
:text "Press Me"
:command (lambda ()
(format t "Hello World!~&")))))
(pack b))))
これを新しい SBCL Lisp イメージでそのままコンパイルすると、WITH-LTK
andPACK
は未定義の関数であり、'BUTTON
未定義の変数であるというメッセージが表示されます。
'ltk
そのため、最初にロードしてからin-package
.I を使用して実行する必要があることがわかりました。最初に SBCL コンソールで(ql:quickload 'ltk)
andを使用する必要があります。ただし、未定義の変数(in-package :ltk)
であるというエラー メッセージがまだ表示されます。'BUTTON
* (ql:quickload 'ltk)
To load "ltk":
Load 1 ASDF system:
ltk
; Loading "ltk"
(LTK)
* (in-package :ltk)
#<PACKAGE "LTK">
* (compile-file "/home/user/code/lisp/hello-1.lisp")
; caught WARNING:
; undefined variable: ’BUTTON
;
; compilation unit finished
; Undefined variable:
; ’BUTTON
; caught 1 WARNING condition
; /home/user/code/lisp/hello-1.fasl written
; compilation finished in 0:00:00.009
#P"/home/user/code/lisp/hello-1.fasl"
T
T
*
それから、これが思い通りにいかなかったので、別の質問 ( ltk (common lisp)の問題) の回答に従って、独自のパッケージ定義を定義しようとしました。および Quicklisp" http://xach.livejournal.com/278047.html?thread=674335および ASDF マニュアル ( http://common-lisp.net/project/asdf/asdf/The-defsystem-form.html ) を使用してquickproject:make-project
、しかし、成功しませんでした。現在、次のファイルがあります。
package.lisp (最初に(ql:quickload 'ltk)
SBCL REPL を実行すると、きれいにコンパイルされます):
(defpackage :hello-world-ltk-system
(:use :cl :asdf :ltk))
hello-world-ltk.asd (最初に package.lisp をコンパイルした後、きれいにコンパイルされます):
(in-package :hello-world-ltk-system)
(asdf:defsystem :hello-world-ltk
:serial t
:description "Describe hello-world-ltk here"
:author "Your Name <your.name@example.com>"
:license "Specify license here"
:depends-on (:cl :asdf :ltk)
:components ((:file "package")
(:file "hello-world-ltk")))
hello-world-ltk.lisp (コンパイル エラーが発生しますThe name "HELLO-WORLD-LTK" does not designate any package
)。
(require 'hello-world-ltk)
(in-package :hello-world-ltk)
(defun hello-world-1 ()
(with-ltk ()
(let ((b (make-instance 'button
:master nil
:text "Press me!"
:command (lambda ()
(format t "Hello world!~&")))))
(pack b))))
package.lisp と hello-world-ltk.asd (これらはすべて同じディレクトリにあります) を正常にコンパイルした後で、この hello-world-ltk.lisp をコンパイルしようとすると、次のエラーが発生します。
; compiling (IN-PACKAGE :HELLO-WORLD-LTK)
debugger invoked on a SB-KERNEL:SIMPLE-PACKAGE-ERROR in thread
#<THREAD "initial thread" RUNNING {10029A0FA3}>:
The name "HELLO-WORLD-LTK" does not designate any package.
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-INT:%FIND-PACKAGE-OR-LOSE "HELLO-WORLD-LTK")
0]
(load "/home/user/code/lisp/hello-world-ltk/hello-world-ltk")
debugger invoked on a SIMPLE-ERROR in thread
#<THREAD "initial thread" RUNNING {10029A0FA3}>:
attempt to load an empty FASL file:
"/home/user/code/lisp/hello-world-ltk/hello-world-ltk.fasl"
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Reduce debugger level (to debug level 1).
1: Exit debugger, returning to top level.
(SB-FASL::LOAD-AS-FASL
#<SB-SYS:FD-STREAM
for "file /home/user/code/lisp/hello-world-ltk/hello-world-ltk.fasl"
{1005291233}>
NIL
#<unavailable argument>)
0[2]
だから、 ASDF 、Quicklisp、package.lisp 、、、などquickproject
、パッケージを定義するためのさまざまな方法があり、私はここでかなり迷っています. プロジェクト全体ですべてのコンパイルとパッケージの読み込みを 1 つのコマンドで処理し、より大きなプロジェクトにも拡張できるソリューションを探しています。asdf:defsystem
require
ql:quickload
quickproject:make-project
助けてくれてありがとう:)