「xからyへ」のアイテムを順番に取得するための単一の関数はありますか?
たとえば、(range 10)
[5 6 7 8]が必要な場合(6日から9日まで、または6日から4日を取る)。もちろん、いくつかの関数(たとえば(take 4 (drop 5 (range 10)))
)を組み合わせてこれを使用することもできますが、pythonのような組み込み関数がないのは奇妙に思えmylist[5:9]
ます。ありがとう
「xからyへ」のアイテムを順番に取得するための単一の関数はありますか?
たとえば、(range 10)
[5 6 7 8]が必要な場合(6日から9日まで、または6日から4日を取る)。もちろん、いくつかの関数(たとえば(take 4 (drop 5 (range 10)))
)を組み合わせてこれを使用することもできますが、pythonのような組み込み関数がないのは奇妙に思えmylist[5:9]
ます。ありがとう
主に O(1) であるため、ベクトルのsubvec 。seq の場合、テイク/ドロップの O(n) を使用する必要があります。
哲学的な観点から言えば、組み込み演算子がないのは、Python のように「自然」に感じるために組み込み演算子が必要ないからです。
(defn splice [coll start stop]
(take (- stop start) (drop start coll)))
(splice coll 6 10)
他の機能とまったく同じくらい多くの「新しい構文」を備えた、組み込み言語のように感じます。Python では、特別な[x:y]
演算子は、単一要素のアクセサーと同じくらい自然に感じられるようにするために、言語レベルのサポートを必要とします。
そのため、Clojure は (すでに混雑している) 言語コアをごちゃごちゃにするのではなく、必要に応じてユーザーまたはライブラリがこれを実装する余地を残しているだけです。
(range 5 9)
、または(vec (range 5 9))
。
(おそらく、この構文はrange
2012 年半ばには利用できませんでした。)