[解決済み] なぜClojureには "シンボル "の他に "キーワード "があるのですか?
質問
私は昔から他のLisp(特にScheme)について一応の知識を持っています。最近、私は Clojure . Clojureにはシンボルとキーワードがありますね。シンボルはよく知っていますが、キーワードは知りません。
他のLispsにもキーワードはあるのでしょうか?キーワードとシンボルとの違いは、表記方法(コロンなど)の違い以外にありますか?
どのように解決するのですか?
ここで Clojureのドキュメント のキーワードとシンボルに関するドキュメントです。
キーワードは、それ自身に対して評価される記号的な識別子です。これらは非常に高速な等値性テストを提供します...
シンボルは、通常、他の何かを参照するために使用される識別子です。関数パラメータ、letバインディング、クラス名、グローバルバーを参照するためにプログラムフォームで使用することができます...
キーワードは一般的に、ハッシュマップのキーやマルチメソッドのディスパッチ値など、軽量の定数文字列として使用されます。 シンボルは一般的に変数や関数の名前に使われ、マクロなどを除いてはオブジェクトとして直接操作することはあまりありません。 しかし、キーワードを使用するあらゆる場所でシンボルを使用することを妨げるものは何もありません(常に引用することを気にしないのであれば)。
この違いを理解する最も簡単な方法は、次のように読むことです。
Keyword.java
と
Symbol.java
をClojureのソースに追加しました。 いくつかの明らかな実装の違いがあります。 例えば、Clojureのシンボルはメタデータを持つことができ、キーワードは持つことができません。
シングルコロン構文に加えて、ダブルコロンで名前空間修飾されたキーワードを作ることができます。
user> :foo
:foo
user> ::foo
:user/foo
Common LispにもRubyや他の言語と同様にキーワードがあります。 もちろん、それらの言語では若干の違いがあります。 Common LispのキーワードとClojureのキーワードの違いをいくつか紹介します。
-
ClojureのキーワードはSymbolsではありません。
user> (symbol? :foo) false
-
キーワードは、特に修飾しない限り、どの名前空間にも属しません。
user> (namespace :foo) nil user> (namespace ::foo) "user"
(感謝 ライナー・ヨスヴィッヒ のおかげで、見るべきもののアイデアを得ることができました)。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン