5

私はいくつかの Common Lisp 関数をいくつかの Lisp ソース ファイルで開発しました。これらの関数を、私が書いた他の関数で簡単に利用できるようにするか、他の人にとって役立つと思われる場合は github で利用できるようにします。今のところ、事前に定義されたフォルダーにそれらを入れて、(require "/path/to/my/modules/module.lisp").

モジュールの Lisp ライブラリを定義する正しい (正規の Lisp) 方法を理解したいと思っています。そして、質問の 2 番目の部分は、それらをどのように使用するか (私が定義したのか、それとも誰かから入手したのか) です。

私はdefpackageとについてたくさん読んdefsystemできましたasdf。しかし、私が読んだものはすべて、このタスクの宇宙の特定のコーナーに焦点を当てているようです. カスタム モジュールの作成、展開、使用の全体像を把握するのに苦労しています。目の前に Lisp 環境 (CLISP または SBCL).lispがあり、そこからパッケージまたはライブラリを作成したい 1 つ以上のファイルがあると仮定すると、それを行うために必要な手順を説明するドキュメントがどこかにありますか? それはおそらく私がすでに読んだものですが、文脈を理解していないために追跡しませんでした. ASDFについて読んだことは、機能的には私が求めているものであるように見えますが、ASDFが私の唯一の選択肢なのか、それともたまたまそれが事実上のものなのかを理解していません標準と他のほとんどの人が使用するもの、または何でも。SBCL で少し遊んでみましたが、正しく使用できているかどうか確信が持てず、CLISP での設定方法に関する情報もありませんでした。したがって、このタスクに対する中間のバニラアプローチとは何かを理解したいと思っています。

私はこれが大きくずさんな一連のサブ質問であることを知っています. 繰り返しになりますが、参考になる良い参考文献があれば、読むことができます。これがどのように機能するのか、また「最善の」アプローチがあるかどうか、または Lisp では少し「ワイルド ウェスト」のライブラリ選択のようなものがあるかどうかについて、全体像を把握するのに少し苦労しています。 -マネージャー-あなたはアプローチが好きです。私はグーグルのことをして、関連があると思われるものは何でも読みましたが、私の脳はそれらすべてから回転しています.

ありがとう。

4

5 に答える 5

6

システムは、ファイルとサブシステムの集まりです。そのようなシステムをコンパイルまたはロードすることができます。他の操作も可能です。依存関係を追跡し、最小限の作業を実行しようとします。

SBCL と CLISP を使用している場合は、ASDF が最適ツールです。http://www.cliki.net/asdfを参照

ASDFは、とりわけ、そのDEFSYSTEMようなシステムを記述するためのマクロを提供します。

自分が何をしているのかわからない限り、PROVIDE/ -を使用しないでください。ASDFは行くべき道です。REQUIRE

コードを公開して、他のユーザーが簡単にロードできるようにするには、QUICKLISPを使用します。参照: http://www.quicklisp.org/beta/

于 2014-01-06T15:34:57.997 に答える
3

ASDF と Quicklisp は便利なツールであり、それは確立された事実です。ただし、以前の回答で説明されているように、「ライブラリ」の概念について別の見方をしたいと思います

ASDFは、一連のソース ファイルのコンパイルとロードを自動化するように設計されています。UNIX にとってのmakeとは、CL にとってのことです。ASDF を使用しない CL でプログラムを作成しても問題ないのと同様に、make を使用せずにプログラムを作成して配布することは完全に有効です。

load.lispプロジェクトが単純な場合は、プロジェクトの依存ファイルを正しい順序でロードするためのステートメントを含むファイル (例: ) を提供するだけで十分です。したがって、ASDF はライブラリの概念には関与しません。

挑発的な言い方をすれば、CL でモジュールを定義する標準的な方法は、defpackage宣言を使用することです。これは、プログラマーが自分の宣言を他の人の宣言から分離できるようにする言語単位であるためです。

次に、それを他の人が利用できるようにする方法の問題です。移植可能な CL コードを作成する場合は、ASDF が最も一般的なシステム定義機能であり、それを使用する必要があります。他の人が簡単に入手できるようにしたい場合は、ここ数年で CL の外観を変えたツールが Quicklisp です。

最後に、ASDF も Quicklisp も標準ではなく、ツールであることを付け加えたいと思います (その有用性は失われません)。ANSI Common Lisp は標準であり、システム定義が CL で標準化されることを望んでいます。

于 2014-01-07T16:57:10.497 に答える
2

はい、ASDF は事実上の標準であり、Quicklisp は別の標準です。

Lisp の観点からは、1 つまたは複数の名前空間 (パッケージ) を定義する必要があります。これは、ANSI 規格によって規定されています。コードの観点からは、一連のファイルを整理して、それらが全体になり、何らかの形でそのパッケージを提供する必要があります。これが ASDF のプラグインです。Quicklisp を使用すると、考えられる最も簡単な方法で ASDF システムを管理できます。Quicklisp のリポジトリから多くのライブラリをダウンロードし、ローカル システムを管理して、quicklisp/local-project フォルダにシンボリック リンクを作成することができます。

Quicklisp がインストールされている場合は、次のように入力できます。

(ql:quickload :cl-fad)

REPLでCL-FADライブラリをロードします(おそらくダウンロードします); その後、パッケージ CL-FAD と PATH が利用可能になり、ASDF システムのことを忘れて、パッケージのロジックに固執します。

Quicklisp でダウンロードしたいくつかのプロジェクトの asd ファイルを調べることをお勧めします。

于 2014-01-06T23:02:23.667 に答える
1

local-projectsASDF システム定義を使用し、それらを Quicklisp の(または同様の名前の) フォルダーにリンクして、頻繁に使用する独自のライブラリーをセットアップします。これにより、公開されたパッケージと同様に、quicklisp を使用してそれらをロードできます。

このような ASDF システムのセットアップ方法を学びたい場合は、Quicklisp をインストールすることをお勧めします (インターネットから「未完成」のソフトウェアをインストールする場合は、Quicklisp は非常に簡単です)。よく知られているパッケージを 1 つまたは 2 つクイックロードして、疑わしい場合はドキュメントを参照してください。

このようにして、よく知られているほとんどの CommonLisp パッケージと同様に、ライブラリを公開するようにセットアップ済みです。

于 2014-01-07T07:23:23.427 に答える