2016-03-26 10 views
3

Clojureの新人として、ベクトル(配列のような)とマップ(キーと値のペア)の区別は当初私には明らかでした。Clojureベクトルを使用してキーと値のペアを渡すのはなぜですか?

しかし、多くの状況(「let」特殊形式やキーワード引数を持つ関数など)では、キーと値のペアを渡すためにベクトルが使用されます。

The source code for letには、ベクトルに偶数の要素が含まれていることを確認するチェックが含まれています。

地図の代わりにベクトルが使われる理由は本当にわかりません。コレクションの種類について読んだときには、マップをキー値形式で任意の情報を格納するための好ましい方法と期待しています。

なぜベクトルもキーと値のペアを表現するのに好ましいツールのように見えるのですか?

答えて

5

Clojure IRCの素晴らしい人たちは私に、主な理由を説明しました。マップ(ハッシュ)は注文されていません

(let [a 1 b (inc a)] (+ a b)) 

マップは、彼らが持っている

  1. を使用されていない注文した理由:

    たとえば、フォームletは、引数の順序が安定していない場合は壊れる可能性が後方参照することができます便利なリテラルはありません

  2. バニラClojureには順序付けされたマップがありません ソートキー(奇妙なもの)で並べ替えられたものを除いて。

したがって、引き数を順番に保持する必要があるため、それらがキーと値のペアであるという事実よりも優先されます。

+1

リバインディングは正当であり、また、 ''(let [a 1、a 2] a) 'は' 2'を生成します。 '((fn [a] a)3 4)'は合法であり、 '4'を返す。 – Thumbnail

+0

これはリストではなくベクトルが使われる理由を説明していません。 – DaoWen

+0

リストは最初の引数の評価をトリガするので、人々はそれらを引用する必要があるでしょうか? – VincentDM

関連する問題