#:g1: cl-sliceの紹介

Posted 2014-07-27 23:30:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の209日目です。

cl-sliceとはなにか

 cl-sliceは、Tamas K Papp氏作のCommon Lispでシークエンス/配列をスライスするのに特化したライブラリです。

パッケージ情報

パッケージ名cl-slice
Quicklisp
Quickdocscl-slice | Quickdocs
CL Test Grid: ビルド状況cl-slice | CL Test Grid

インストール方法

(ql:quickload :cl-slice)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 シークエンス/配列のスライスに特化しているだけあって結構面白いことができます。

(cl-slice:slice #(0 1 2 3) 1) 
;=>  1

(cl-slice:slice #(0 1 2 3) '(1 . 3)) ;=> #(1 2)

(cl-slice:slice #(0 1 2 3) '(0 . -1)) ;=> #(0 1 2)

(cl-slice:slice #(0 1 2 3) #(1 3)) ;=> #(1 3)

この辺りは普通ですが、ビットベクタで1が立っているところを取得できたりするのが面白いところ
他、範囲の指定方法やフィルター的なものがあります。また、多次元配列も扱えます。

(cl-slice:slice '(0 1 2 3) #*0101) 
;=>  (1 3)
(cl-slice:which #'evenp #(0 1 2 3)) 
;=>  #(0 2)

(cl-slice:slice #(0 1 2 3) (cl-slice:head 1)) ;=> #(0)

(cl-slice:slice #(0 1 2 3) (cl-slice:head 2)) ;=> #(0 1)

(cl-slice:slice #(0 1 2 3) (cl-slice:tail 1)) ;=> #(3)

(cl-slice:slice #(0 1 2 3) (cl-slice:tail 2)) ;=> #(2 3)

(cl-slice:slice #(0 1 2 3) (cl-slice:including 2 3)) ;=> #(2 3)

(cl-slice:slice #(0 1 2 3) (cl-slice:nodrop 2)) ;=> #(2)

(cl-slice:slice #2A((0 1 2) (3 4 5)) t 2) ;=> #(2 5)

まとめ

 今回は、cl-sliceを紹介してみました。
特化したライブラリは紹介しやすくて良いですね。

comments powered by Disqus