2

私はClojureが初めてで、基本を学ぼうとしています。私がつまずいたことの 1 つは、データ構造とそれらが使用する関数との間の相関関係を理解することです。

たとえば、新しいベクターを作成すると、次のようになります。

(def my-vec [1 2 3])

次に、電話しようとするとmy-vec

(my-vec)

私は得る:

ArityException Wrong number of args (0) passed to: PersistentVector  clojure.lang.AFn.throwArity (AFn.java:437)

引数を渡すことができることはわかっており、呼び出しているように見えますgetが、どうすればわかりますか? どのような引数がPersistentVector必要で、それに関するドキュメントはどこにありますか?

私は試した:

(doc PersistentVector)

しかし、それは戻りますnil

4

4 に答える 4

4

ドキュメントは、IPersistentVector の下にあります: http://clojure.org/data_structures

特に: ベクトルは、1 つの引数の invoke() に対して IFn を実装します。これは、インデックスであると推定され、n 番目であるかのように自分自身を検索します。つまり、ベクトルはインデックスの関数です。

于 2012-08-10T06:29:04.420 に答える
1

Clojure のベクターに数値を渡すと、ベクターはその数値を自分自身へのインデックスとして使用し、そのインデックスの値を返します。

user> (def my-vec [1 2 3 4 5])
#'user/my-vec
user> (my-vec 2)
3

これにより、vec から複数のキーを取得するこのような式を書くことができます

user> (map my-vec [1 3 4])
(2 4 5)
于 2012-08-10T06:27:39.637 に答える
-2

my-vecは関数ではないため、次を呼び出す必要があります: my-vec not(my-vec)

試してください: (nth my-vec i) このベクトルの i 番目の要素を取得します。

リンク: nth

于 2012-08-10T06:17:26.930 に答える