clojure備忘録[replを使った開発手法 その1(シーケンスを扱う関数)]
では早速、replとsample.cljを使って、
シーケンスを扱う関数を作って行きましょう。
と思ったのですが、「シーケンス」の説明が必要であることに気づいたので、
このエントリはこれについて先に説明しておきたいと思います。
clojureとは切っても切り離せない関係にあるので。
というわけで、「シーケンス」という単語が突然でてきましたが、
これは何かというと今まで散々出てきた「リスト」のようなものです。
リストは「データの実体」を伴っている連続データであるのに対し、
「シーケンス」はより抽象化された連続データになります。
javaの用語を使うのであれば、
「シーケンスというインタフェースを実装したオブジェクト」
という表現になります。
故に、これを実装している連続データは全てシーケンスとして扱えます。
シーケンスとして扱える具体的なデータとしては、
・リスト
・ベクタ
・マップ(後々説明します)
・セット(後々説明します)
・IO(ファイル入出力等を遅延したシーケンスとして)
等が挙げられます。多分まだあると思いますが。
これらについてはデータリテラルのまとめとして、
また別途エントリを記載する予定です。
さて、なぜ「シーケンスを扱う関数を自前で実装していくか」というと、
理由は3つあります。
・末尾再帰プログラムの練習にぴったり。
・Lispではリスト(シーケンス)を扱う関数は非常に良く使用されるので、
この機会にこれらの関数の動きを覚えてしまう。
・「手続き型言語的な考え方」から「Lisp的な考え方」へと脱皮する。
シーケンス関数を自前実装するだけで、これらを網羅できます。
・・・と思ってます個人的に。もちろん保証はしませんw
ここに至るまでだいぶ長かったですが、
今度こそ自前関数の実装に入っていきましょう!