13

quicklisp を使用して CL-PNG パッケージをインストールしました。

(ql:quicklisp 'png)

ここで、CL-PNG パッケージに依存する独自のパッケージを定義したいと考えています。そのようです:

(defpackage :FOO
  (:use :CL :PNG)
  (:export :BAR))

コンパイルすると、次のエラーが発生します。

The name "PNG" does not designate any package.
   [Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR]

(require :PNG)パッケージをコンパイルする前に REPLを呼び出す必要があるようです。

requireREPLを手動で呼び出すことなく、CL-PNG パッケージをコンパイラで使用できるようにするにはどうすればよいですか?

更新: SBCL を使用しています。

4

1 に答える 1

15

あなたは2つの別々の概念を混同します:asystemとa package。A packageはCommonLisp標準によって定義されており、シンボルのコレクションであり、それらの可視性と使用法を制御する方法です。Asystemは標準で定義されていません。これは、によって導入された概念ASDFです。これは、単一のプロジェクトでファイルの相互依存関係を管理して、適切にコンパイルおよびロードできるようにするためのメタデータのコレクションです。sの形式で記述された、プロジェクトを配布する方法を提供するためQuicklispに上に構築されています。ASDFASDF system

したがって、と呼ばれる( quickload)aをインストールする場合、これは、このシステムにと呼ばれるパッケージがあることを意味するわけではありません。システムはパッケージを定義しますか(通常は1つ、または複数のパッケージを定義します)、それらの呼び出し方法は作成者の裁量に委ねられています。ほとんどのプロジェクトには、またはファイルがあり、それらのファイルが定義されています。systemPNGPNGpackage.lisppackages.lisppackage

ただし、CL-PNGロードしているシステムの場合、実際にはパッケージが定義PNGされており、実行中のプロセスで使用できるようになっている必要がありますquickload。ただし、Lispシステムを起動するたびに何らかの方法でロードする必要があります。ASDFシステムへの依存関係を定義する手段を提供します。これにより、自分CL-PNGだけをロードでき、依存するすべてのが自動的にロードされ、使用したいすべてのが利用可能になります。 systemsystempackage

于 2012-06-23T18:39:33.007 に答える