#:g1: generic-sequencesの紹介

Posted 2014-12-20 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の355日目です。

generic-sequencesとはなにか

 generic-sequencesは、David Sorokin氏作のC#、F#、Scalaのシークエンスのように、リスト、遅延ストリーム、イテレータを統合したシークエンスを提供するものです。

パッケージ情報

パッケージ名generic-sequences
Quicklisp
Quickdocsgeneric-sequences | Quickdocs
CL Test Grid: ビルド状況generic-sequences | CL Test Grid

インストール方法

(ql:quickload :generic-sequences)

試してみる

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

 定義されているものは、こんな感じです。

今時の言語のシークエンスライブラリに収録されているような関数が多いので大体使い方も想像できますが、割合にClojureっぽい気もします。

(use-package :gen-seq)

(seq->list #(0 1 2 3)) ;=> (0 1 2 3)

(seq->list (seq-take 4 (seq-append '(0 1 2) #(3 4 5)))) ;=> (0 1 2 3)

(seq->list (seq-take 5 (seq-iterate #'1+ 100))) ;=> (100 101 102 103 104)

(coerce (seq->vector (seq-reduce #'seq-append (seq-interpose "," '("お" "は" "よ" "う" "日本")))) 'string) ;=> "お,は,よ,う,日本"

(seq->list (seq-take 5 (seq-cycle '(0)))) ;=> (0 0 0 0 0)

ジェネレータ的な動作や、iterateマクロとの連携等、多機能です。
詳細はPDFのマニュアルが付属して来ますので、そちらを参照のこと。

まとめ

 今回は、generic-sequencesを紹介してみました。
seq-という接頭辞がやや煩わしいですが、既存のものと併用するばあい接頭辞がないと混乱するような気もします。

comments powered by Disqus