Lisp-packages

提供:Dev Guides
移動先:案内検索

LISP-パッケージ

プログラミング言語の一般的な用語では、パッケージは、名前のセットを別のセットから分離する方法を提供するために設計されています。 あるパッケージで宣言されたシンボルは、別のパッケージで宣言された同じシンボルと競合しません。 このようにして、パッケージは独立したコードモジュール間の名前の競合を減らします。

LISPリーダーは、検出したすべてのシンボルのテーブルを保持しています。 新しい文字シーケンスを見つけると、新しいシンボルを作成し、シンボルテーブルに保存します。 このテーブルはパッケージと呼ばれます。

現在のパッケージは、特別な変数 package によって参照されます。

LISPには2つの定義済みパッケージがあります-

  • common-lisp -定義されたすべての関数と変数のシンボルが含まれています。
  • common-lisp-user -common-lispパッケージと、編集およびデバッグツールを備えた他のすべてのパッケージを使用します。要するにcl-userと呼ばれます

LISPのパッケージ関数

次の表は、パッケージの作成、使用、操作に使用される最も一般的に使用される機能を示しています-

Sr.No. Function and Description
1
  • make-package *package-name &key :nicknames :use

指定されたパッケージ名で新しいパッケージを作成して返します。

2
  • in-package *package-name &key :nicknames :use

パッケージを最新にします。

3
  • in-package* name

このマクロは、 package をnameという名前のパッケージに設定します。これは、シンボルまたは文字列でなければなりません。

4
  • find-package *name

パッケージを検索します。 その名前またはニックネームを持つパッケージが返されます。そのようなパッケージが存在しない場合、find-packageはnilを返します。

5
  • rename-package *package new-name &optional new-nicknames

パッケージの名前を変更します。

6
  • list-all-packages*

この関数は、現在Lispシステムに存在するすべてのパッケージのリストを返します。

7

delete-package package

パッケージを削除します。

LISPパッケージの作成

*defpackage* 関数は、ユーザー定義パッケージを作成するために使用されます。 次の構文があります-
(defpackage :package-name
   (:use :common-lisp ...)
   (:export :symbol1 :symbol2 ...)
)

どこで、

  • package-nameはパッケージの名前です。

  • :useキーワードは、このパッケージに必要なパッケージ、つまり、このパッケージのコードで使用される機能を定義するパッケージを指定します。

  • :exportキーワードは、このパッケージの外部にあるシンボルを指定します。

    *make-package* 関数は、パッケージの作成にも使用されます。 この関数の構文は次のとおりです-
make-package package-name &key :nicknames :use

引数とキーワードの意味は以前と同じです。

パッケージを使用する

パッケージを作成したら、それを現在のパッケージにすることで、このパッケージのコードを使用できます。 in-package マクロは、環境内でパッケージを最新にします。

main.lispという名前の新しいソースコードファイルを作成し、次のコードを入力します。

(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello ()
   (write-line "Hello! This is Tom's Tutorials Point")
)

(hello)
(in-package dick)
(defun hello ()
   (write-line "Hello! This is Dick's Tutorials Point")
)

(hello)
(in-package harry)
(defun hello ()
   (write-line "Hello! This is Harry's Tutorials Point")
)

(hello)
(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)

あなたがコードを実行すると、それは次の結果を返します-

Hello! This is Tom's Tutorials Point
Hello! This is Dick's Tutorials Point
Hello! This is Harry's Tutorials Point

パッケージを削除する

*delete-package* マクロを使用すると、パッケージを削除できます。 次の例はこれを示しています-

main.lispという名前の新しいソースコードファイルを作成し、次のコードを入力します。

(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello ()
   (write-line "Hello! This is Tom's Tutorials Point")
)

(in-package dick)
(defun hello ()
   (write-line "Hello! This is Dick's Tutorials Point")
)

(in-package harry)
(defun hello ()
   (write-line "Hello! This is Harry's Tutorials Point")
)

(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)
(delete-package tom)
(in-package tom)
(hello)

あなたがコードを実行すると、それは次の結果を返します-

Hello! This is Tom's Tutorials Point
Hello! This is Dick's Tutorials Point
Hello! This is Harry's Tutorials Point
*** - EVAL: variable TOM has no value