0

Clojure でベクトルをテストしてネストされているかどうかを確認する方法、つまり [:a :b :c :d] と [[:a :b] [:c :d]] をテストする方法はありますか?

テストしてみた

(vector? [:a :b :c :d])
 true

ただし、ネストされたベクトルにも当てはまります。

(vector? [[:a :b] [:c :d]])
 true
4

2 に答える 2

0

vector?true引数がベクトル (implements ) の場合に返しますIPersistentVector[:a :b :c :d]はベクトルです。そうです[[:a :b] [:c :d]]vector?したがって、それらのいずれかを呼び出すと、 が返されtrueます。

ここで、要素のいずれかがベクトルである場合、そのベクトルはネストされていると言えます。述語を使用someしてこれをテストできます。vector?

(defn nested-vector? [v]
  (some vector? v))

これは特にベクトルをテストします。Sequentialただし、任意のデータ構造に適用される、より一般的なアプローチを採用することもできます。

(defn nested? [coll]
  (some sequential? coll))
于 2013-11-23T16:42:15.773 に答える
0

それらのいずれかが連続しているかどうかを確認するのは近いようです:

user> (every? #(not (sequential? %)) [:a :b :c :d])
true
user> (every? #(not (sequential? %)) [:a :b :c :d [:e]])
false

Java 配列もチェックする必要があるかもしれませんが、すべての基本コレクションをシーケンスにすることができるためです。

(every? #(not (sequential? %)) [:a :b :c :d (into-array [1 2 3])])
于 2013-11-23T05:28:07.043 に答える