以下の例は、カプセル化を行うための一例として、ポール・グレアムANSI Common Lispの中で与えられたを作成するときに別のファイルにdefpackageを入れた方が良いです:は、それがパッケージ
(defpackage "CTR"
(:use "COMMON-LISP")
(:export "COUNTER" "INCREMENT" "CLEAR"))
(in-package ctr)
;function definitions here
しかしピーターSeibels実践Common Lispの中で、リンクhere、彼は言う:
パッケージは、読者によって使用されているので、あなたがそのパッケージに切り替えるIN-PACKAGE 表現を含むファイルをロードしたり、COMPILE-FILEをする前に、パッケージが を定義する必要があります。パッケージは と定義されている必要があります。 が必要なときにパッケージが存在することを確認するための最善の第一歩は、 を読む必要があるコードとは別のファイルにすべてのDEFPACKAGEを入れることです。これらのパッケージでは、
のように、パッケージごとに2つのファイルを作成することをお勧めします.1つはパッケージで、もう1つはコードです。 defpackagesを含むファイルは、(パッケージ内の "COMMON-LISP-USER")で始まる必要があります。
私には、パッケージとコードの前に同じファイルにdefpackageを置くのが、パッケージが使用前に定義されていることを確認する良い方法です。最初の方法は、1つのファイルにすべてを収集する方が簡単です。この方法を使ってパッケージを作成する際に問題がありますか?
私は注文のことがそれらの最も重要な理由だと思うし、もう1つあります:パッケージは複数のファイルに分割されます。 –
パッケージ定義を同じファイルに置くことができる単一ファイルプロジェクトの場合を除いて私はあなたに同意します。 AFAIK、それは標準によって禁じられていません。 –
ASDFを使用するときに複数のファイルと順序が合います。最初の2点は個人の好みによく似ています。 – snowape