clojure備忘録[replを使った開発手法 その1(シーケンスを扱う関数)]

では早速、replとsample.cljを使って、
シーケンスを扱う関数を作って行きましょう。


と思ったのですが、「シーケンス」の説明が必要であることに気づいたので、
このエントリはこれについて先に説明しておきたいと思います。
clojureとは切っても切り離せない関係にあるので。


というわけで、「シーケンス」という単語が突然でてきましたが、
これは何かというと今まで散々出てきた「リスト」のようなものです。
リストは「データの実体」を伴っている連続データであるのに対し、
「シーケンス」はより抽象化された連続データになります。
javaの用語を使うのであれば、
「シーケンスというインタフェースを実装したオブジェクト」
という表現になります。
故に、これを実装している連続データは全てシーケンスとして扱えます。


シーケンスとして扱える具体的なデータとしては、


・リスト
・ベクタ
・マップ(後々説明します)
・セット(後々説明します)
・IO(ファイル入出力等を遅延したシーケンスとして)

等が挙げられます。多分まだあると思いますが。
これらについてはデータリテラルのまとめとして、
また別途エントリを記載する予定です。


さて、なぜ「シーケンスを扱う関数を自前で実装していくか」というと、
理由は3つあります。


・末尾再帰プログラムの練習にぴったり。
Lispではリスト(シーケンス)を扱う関数は非常に良く使用されるので、
この機会にこれらの関数の動きを覚えてしまう。
・「手続き型言語的な考え方」から「Lisp的な考え方」へと脱皮する。

シーケンス関数を自前実装するだけで、これらを網羅できます。
・・・と思ってます個人的に。もちろん保証はしませんw



ここに至るまでだいぶ長かったですが、
今度こそ自前関数の実装に入っていきましょう!