4

「xからyへ」のアイテムを順番に取得するための単一の関数はありますか?

たとえば、(range 10)[5 6 7 8]が必要な場合(6日から9日まで、または6日から4日を取る)。もちろん、いくつかの関数(たとえば(take 4 (drop 5 (range 10))))を組み合わせてこれを使用することもできますが、pythonのような組み込み関数がないのは奇妙に思えmylist[5:9]ます。ありがとう

4

3 に答える 3

6

主に O(1) であるため、ベクトルのsubvec 。seq の場合、テイク/ドロップの O(n) を使用する必要があります。

于 2012-07-23T07:29:36.737 に答える
1

哲学的な観点から言えば、組み込み演算子がないのは、Python のように「自然」に感じるために組み込み演算子が必要ないからです。

(defn splice [coll start stop]
  (take (- stop start) (drop start coll)))

(splice coll 6 10)

他の機能とまったく同じくらい多くの「新しい構文」を備えた、組み込み言語のように感じます。Python では、特別な[x:y]演算子は、単一要素のアクセサーと同じくらい自然に感じられるようにするために、言語レベルのサポートを必要とします。

そのため、Clojure は (すでに混雑している) 言語コアをごちゃごちゃにするのではなく、必要に応じてユーザーまたはライブラリがこれを実装する余地を残しているだけです。

于 2012-07-23T18:05:12.457 に答える
0

(range 5 9)、または(vec (range 5 9))

(おそらく、この構文はrange2012 年半ばには利用できませんでした。)

于 2013-12-01T06:28:49.380 に答える