2012-11-01から1ヶ月間の記事一覧

clojure備忘録[replを使った開発手法 その3(filter関数)]

標準のfilter関数の挙動 続いて実装する関数は「filter」という名称の関数です。 まずは概要を。 表記(filter f coll) 引数f引数にcollの要素を受け取り、論理値を返却する関数オブジェクト。 coll入力シーケンス 返却値シーケンスcollの要素に関数fを適用し…

clojure備忘録[replを使った開発手法 その2(map関数)]

標準のmap関数の挙動 最初に実装する関数は「map」という名称の関数です。 (データ型のマップではありません。)次のようなデータについて考えます。 ; 関数名と年代 '(("FORTRAN" 1954) ("Lisp" 1958) ("C" 1972) ("C++" 1983) ("Perl" 1987) ("Python" 19…

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

では早速、replとsample.cljを使って、 シーケンスを扱う関数を作って行きましょう。 と思ったのですが、「シーケンス」の説明が必要であることに気づいたので、 このエントリはこれについて先に説明しておきたいと思います。 clojureとは切っても切り離せな…

clojure備忘録[replを使った開発手法 その0(ソースファイルの扱い方)]

これまでのエントリで、clojureを書いていく際に必要な基本的情報は説明したつもりです。 が、実際にどのように開発をしていくのかはまだあまりイメージが沸いていないと思います。 以前のエントリではしばしば小さなコード断片(S式)を replのプロンプトに…

clojure備忘録[clojureの基本的な関数 その4(=関数)]

atomは存在が確認できなかったのでclojureの基本関数としてはこれが最後です。 値が等しいか等しくないかを返却する関数です。 表記 (= form0 form1) 引数を2つとり、両者の「S式の構成も含めて」、「値」が同じであれば論理値のtrueを、 同じでなければfal…

clojure備忘録[clojureの基本的な関数 その2(first関数)]

引数で受け取ったリストの先頭要素を新しい要素として返却します。 表記 (first seq) seqがリストになります。 実例 実際のデータを使って動作を確認してみます。 user=> (first '(1 2 3)) 1 user=> ちゃんと先頭がとれています。 ネストしたリストも試して…

clojure備忘録[clojureの基本的な関数 その1(cons関数)]

まずはcons関数です。 前エントリで触れた通り、第1引数を第2引数のリストの先頭に挿入した、新しいリストを返却します。 表記 使用方法は次の通りです。 (cons x seq) xは先頭に挿入されるデータ、seqは元になるリストです。 実際に使用してみましょう。 u…

clojure備忘録[clojureの基本的な関数 その0]

最小構成のLispは次の要素があれば実装可能らしいです。 (私は突っ込んで検証したことがないのですが。。) ・アトム ・リスト ・5つの基本関数 ・4種の特殊形式今回説明するのはこの中の「基本関数」についてです。 Lispの基本関数は歴史的な背景もあっ…

clojure備忘録[clojureの基本的な関数 その3(rest関数)]

基本的関数の最後は、2番目以降の全ての要素を新たなリストとして返却するrest関数です。 表記 (rest seq) こちらもfirst関数と同じく、第1引数のseqがリストになります。 実例 user=> (rest '(1 2 3)) (2 3) user=> ちゃんと2番目以降の要素がリストとして…