Clojure の シーケンスを python のスライスのように取り出す
(use 'clojure.contrib.test-is) (defn slice ([coll start] (let [start (max start 0)] (drop start coll))) ([coll start end] (let [start (max start 0)] (take (- end start) (drop start coll)))) {:doc "Extract a subsequencet like a slice of python." :test #(are (= _1 _2) (slice [] 2 7) [] (slice [1 2 3 4 5] 1) [2 3 4 5] (slice '(a b c d e f g h i k) 2 4) '(c d) (slice "abcdefg" 3) '(\d \e \f \g) (slice "abcdefg" 0 2) '(\a \b) (slice [1 2 3 4] 5) '() (slice [1 2 3 4] 3 0) '() (slice "abcd" -1 6) '(\a \b \c \d) (slice "abcd" -1 -3) '() (slice "abcd" -4 -1) '())})
ソース http://github.com/fatrow/hozumi-clojure/blob/master/utils.clj
下半分は、ただのテスト用の記述です.そこから大体動作が分かると思います。マイナス方向はあんま使わなそうなので入れませんでした。
参考
ClojureでL-99 (P18 範囲切り出し)
http://cadr.g.hatena.ne.jp/g000001/20081006/1223296309
http://tips.lisp-users.org/clojure/index.cgi?部分文字列を取り出す
うーん、↑のようにsubseqではできませんでした。以前はできていたのかも。