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

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引数が普通の括弧でなく、かぎ括弧「[...]」になっています…