2012-01-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番目以降の要素がリストとして…

clojure備忘録[末尾再帰の最適化]

このエントリーはまとめようとしたら、 書いては消し書いては消しの繰り返しで時間がかかってしまいました。 理解はしていても人に伝える為に整理しようとするのは難しいもんですねぇ。 さて。 本エントリでは、Lisp方言であるschemeとclojureが、 「繰り返…

clojure備忘録[clojureの基本的な特殊形式 その7(loop/recur特殊形式)]

loop/recur特殊形式は「末尾再帰最適化」を行います。 何のこっちゃかと思うかもしれませんが、繰り返しの制御を行う為の特殊形式です。 手続き型言語に慣れた方は驚くかもしれませんが、 clojureには明示的な繰り返し制御用の式がありません。 実は繰り返し…

clojure備忘録[clojureの基本的な特殊形式 その6(let特殊形式)]

これはマクロで実装できるので個人的には特殊形式ではないだろうと思っていたら特殊形式でした。。 というわけで「let特殊形式」です。 一般的な手続き型言語で定義する関数やらメソッドでは、代入を使って値を保持しておき、後からその値を使って処理を実行…

clojure備忘録[clojureの基本的な特殊形式 その5(do特殊形式)]

do特殊形式は、ある箇所で複数のS式を順に評価させたいけれども、 わざわざ関数を作るのは面倒くさい、という時に使用します。 do特殊形式は、内部に複数のS式を記述します。 最後に評価されたS式の値が、do特殊系式の返却値となります。 表記 (do & body) …

clojure備忘録[clojureの基本的な特殊形式 その4(if特殊形式)]

お腹いっぱいかもしれませんが一応。 if特殊形式は、条件分岐のフロー制御を行います。 表記 (if predicate-form then-form else-form) 既に説明済みですが、評価順序は次のようになります。 1.まずpredicate-formが評価される。 2.1の結果が真ならば、…

clojure備忘録[clojureの基本的な特殊形式 その3(fn特殊形式)]

fn特殊形式は、関数をデータとして生成して返却します。 表記 (fn [arg0 arg1 ...] & forms) または #(form) 1番目が典型的な表記方法です。これを使っておけば間違いありません。 良く見ると、第1引数が普通の括弧でなく、かぎ括弧「[...]」になっています…

clojure備忘録[clojureの基本的な特殊形式 その2(def特殊形式)]

def特殊形式は、データに名前をつけて紐付けし、かつそのデータの値を返却します。 データに名前をつけることにより、後から何度も参照することが可能になります。 表記 (def name var) 第2引数が名前、第3引数がデータになります。 おさらいになりますが、…

clojure備忘録[clojureの基本的な特殊形式 その1(quote特殊形式)]

概要 quote特殊形式は、引数のS式を評価せずにそのままデータとして返却します。 表記 (quote form) または 'form 1番目は、第2引数以降を指定しても無視されますので注意してください。2番目の「'」(シングルクオート)は、単なるquoteの省略形です。 こち…

clojure備忘録[clojureの基本的な特殊形式 その0]

前エントリで「Lisp」の基本的な概念について、 大雑把ではありますが一通り説明してみました。 その前提を元に、ここからはclojureに特化した説明を行っていきます。 特に関数、特殊形式については、「どのようなものか」は既に記述しましたので、 この後の…

clojure備忘録[前提としてのLisp]

replでいろいろ遊ぶ前に、Lispの基本的な概念についてもざっくりとですがまとめておきます。 Lispは、他の一般的な手続き型の言語と比べて独特の性質があります。 clojureもLispの方言の一つですから、その独特さを理解するためには、 どうしても基本的なLis…

clojure備忘録[最小構成の環境構築]

clojureには簡単に環境構築を行える「leiningen」というツールがあります。 このツールは環境構築だけでなく開発時にも非常に便利に使えるのですが、 インターネットアクセスが可能であることが大前提の為、 proxy越しの環境では動作させるまでに挫折しそう…

clojureについてまとめていきます。

まったくご無沙汰しております。 昨年の暮れから、年賀状の宛名印刷ツールをclojureで実装してたんですが、clojureでのコーディングが楽しくて学習結果を全然まとめていませんでした。 んで、今何をしているかというと宛名印刷ツールはちょっと一休みして、c…

「msi Wind Netbook U100」にてUbuntu 11.10が問題なく動作。(内臓無線LAN含む)

さて嫁さん専用PCを購入し、Ubuntuを11.10にしたら結構かっこよくなってたので、 ひとつ私も自分のNetbookをアップグレードしようと思いました。 結論 「msi Wind Netbook U100」にてUbuntu 11.10が無線LAN含めて問題なく動作しました。 過去動作しなかった…

「FUJITSU LIFEBOOK A540/CX」+「Logitec LAN-GMW/DS」にてUbuntu 11.10が問題なく動作。

まったくもってお久しぶりです。 ここ数ヶ月、仕事に忙殺されて平日はおろか土日もグッタリしてて何もできませんでしたが、先週末久々に気分の良い事があったのでメモ。 結論 表題の通り、「FUJITSU LIFEBOOK A540/CX FMVXN4HJ2Z」+「Logitec LAN-GMW/DS」…

マズイ。。

今、clojureで年賀状の宛名印刷ソフトの機能追加をしてるのですが、 実装が楽しすぎてclojureについて学習した結果をまったくまとめていないのです。 コードそのものはSourceForgeにコミットしているので、 「ブログにしなくてもコード見りゃ後で参考にでき…

あけましておめでとうございます。

本年もよろしくお願い致します。 ずーっと昔にcriaのブログでも書いたことがあるのですが。 プライベートで使うPCをLinuxへ完全移行したかったのです。 もうね、XPは仕方なく買ったけど、サポート切れるからVistaだか7だか買え? んで、それインストールする…