Lisp-hash-table
LISP-ハッシュテーブル
ハッシュテーブルのデータ構造は、キーのハッシュコードに基づいて編成された*キーと値*のペアのコレクションを表します。 キーを使用して、コレクション内の要素にアクセスします。
ハッシュテーブルは、キーを使用して要素にアクセスする必要があるときに使用され、有用なキー値を識別できます。 ハッシュテーブルの各アイテムにはキー/値のペアがあります。 キーは、コレクション内のアイテムにアクセスするために使用されます。
LISPでハッシュテーブルを作成する
Common LISPでは、ハッシュテーブルは汎用コレクションです。 任意のオブジェクトをキーまたはインデックスとして使用できます。
ハッシュテーブルに値を格納する場合、キーと値のペアを作成し、そのキーの下に格納します。 後で、同じキーを使用してハッシュテーブルから値を取得できます。 各キーは単一の値にマッピングされますが、新しい値をキーに保存できます。
LISPのハッシュテーブルは、キーの比較方法に基づいて、eq、eql、またはequalの3つのタイプに分類できます。 ハッシュテーブルがLISPオブジェクトでハッシュされる場合、キーはeqまたはeqlと比較されます。 ハッシュテーブルがツリー構造でハッシュする場合、等しいを使用して比較されます。
どこ-
- key 引数はキーを提供します。
- *:test *引数は、キーの比較方法を決定します-3つの値# 'eq、#' eql、# 'equalのいずれか、または3つのシンボルeq、eql、またはequalのいずれかを持つ必要があります。 指定しない場合は、eqlが想定されます。
- *:size *引数は、ハッシュテーブルの初期サイズを設定します。 これはゼロより大きい整数でなければなりません。
- *:rehash-size *引数は、ハッシュテーブルがいっぱいになったときにサイズをどれだけ増やすかを指定します。 これは、追加するエントリの数であるゼロより大きい整数、または古いサイズに対する新しいサイズの比率である1より大きい浮動小数点数にすることができます。 この引数のデフォルト値は実装依存です。
- *:rehash-threshold *引数は、ハッシュテーブルが成長しなければならない前に、ハッシュテーブルがどれだけいっぱいになるかを指定します。 これは、ゼロより大きく:rehash-sizeより小さい整数(この場合、テーブルが成長するたびにスケーリングされます)か、ゼロと1の間の浮動小数点数です。 この引数のデフォルト値は実装依存です。
引数なしでmake-hash-table関数を呼び出すこともできます。
ハッシュテーブルからのアイテムの取得とハッシュテーブルへのアイテムの追加
次の構文があります-
ここで-
key:関連するキーです
ハッシュテーブル:検索するハッシュテーブルです
デフォルト:エントリが見つからない場合に返される値、指定されていない場合はnil
ハッシュテーブルにアイテムを追加するには、 setf 関数と gethash 関数を使用できます。
例
main.lispという名前の新しいソースコードファイルを作成し、次のコードを入力します。
あなたがコードを実行すると、それは次の結果を返します-
エントリーの削除
この関数の構文は次のとおりです-
例
main.lispという名前の新しいソースコードファイルを作成し、次のコードを入力します。
あなたがコードを実行すると、それは次の結果を返します-
maphash関数
関数とハッシュテーブルの2つの引数を取り、ハッシュテーブル内のキー/値のペアごとに1回関数を呼び出します。
例
main.lispという名前の新しいソースコードファイルを作成し、次のコードを入力します。
あなたがコードを実行すると、それは次の結果を返します-