1

ASDF を学習していますが、定義されたシステムをロードするときに奇妙な問題が発生しました。ここにいくつかの情報があります。私は「hello.asd」という名前の.asdファイルを1行の内容で定義しました:

(asdf:defsystem :hellosystem)

このファイルを「 /tmp/pkg 」というディレクトリに置きます。その後、SBCL を実行して読み込みを試みます。出力は次のとおりです。

This is SBCL 1.1.12, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
* (asdf:asdf-version)

"3.0.2"
* (push #P"/tmp/pkg/" asdf:*central-registry*)

(#P"/tmp/pkg/" #P"/Users/wuli2/quicklisp/quicklisp/")
* (asdf:load-system :hellosystem)

debugger invoked on a ASDF/FIND-SYSTEM:MISSING-COMPONENT:
  Component :HELLOSYSTEM not found

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

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

((:METHOD ASDF/OPERATE:OPERATE (SYMBOL T)) ASDF/LISP-ACTION:LOAD-OP :HELLOSYSTEM) [fast-method]
0] 0

* (asdf:load-system :hello)

debugger invoked on a ASDF/FIND-SYSTEM:MISSING-COMPONENT:
  Component :HELLO not found

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

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

((:METHOD ASDF/OPERATE:OPERATE (SYMBOL T)) ASDF/LISP-ACTION:LOAD-OP :HELLO) [fast-method]
0] 0

* (asdf:load-system :hellosystem)

T
* 

システム:hellosystemを初めてロードしようとしたときに失敗したことに注意してください。だから私はシステムをロードします:hello、おそらくファイル名が必要だと思いましたが、再び失敗しました。load system :hellosystemを再度実行すると、奇妙なことが起こりました。

そこで、別のテストを行い、ファイル名をシステム名と同じになるように変更しました。次に、asdf:load-system を実行すると、すぐに機能しました。

それは私を非常に混乱させました.2つの名前が同一であるべきであるというASDFマニュアルで手がかりを見つけることができませんか?

誰かが私にそれについての洞察を与えることができますか?

ありがとう、

ウー

4

1 に答える 1

3

私はこの手がかりを見つけました: "システムの名前は、文字列またはシンボル、通常はキーワードとして指定されることに注意してください。シンボル (キーワードを含む) の場合、その名前は小文字で取得されます。名前は、 :name initarg を、システムが検出されるファイルシステムの make-pathname に指定します。 "

http://common-lisp.net/project/asdf/asdf/Using-ASDF.html

メッセージは、(asdf:defsystem <symbol> ...)フォームは というファイルに存在する必要があるというものです<lowercased-symbol>.asd。システムに文字列で名前を付ける場合、ファイル名にはその文字列を使用する必要があります。

于 2013-11-15T05:40:23.573 に答える