夢とガラクタの集積場

落ちこぼれ三流エンジニアである管理人の夢想=『夢』と、潰えた夢=『ガラクタ』の集積場です。

2013-06-01から1ヶ月間の記事一覧

Clojure勉強日記(その24 SnakeGameをClojureで書いてみる(その3

こんにちは。いよいよ大詰め。 今まではコマンドライン上でしか動作しなかったゲームをGUI上で表示してみます。■snake.clj:Graphicの塗りつぶし処理 ; Fill-Points (defn fill-point [graphic pt color] (let [[x y width heignt] (point-to-screen-rect pt…

Clojure勉強日記(その23 SnakeGameをClojureで書いてみる(その2

こんにちは。では、SnakeGameの状態更新部分を進めていきます。 今回、状態が更新されるタイミングは以下の3つです。 ゲームを開始する。 ターンごとにヘビが位置を更新する。リンゴが食べられていたらヘビの長さを伸ばし、リンゴを再配置する。 ヘビの向き…

Clojure勉強日記(その22 SnakeGameをClojureで書いてみる(その1

こんにちは。今まで確認してきた状態管理のAPIを使い、「SnakeGame」を作ってみます。 と言いつつ、そもそもSnakeGameを起動するところからしてはまったのでそこから(汗まず、前提として「https://github.com/stuarthalloway/programming-clojure」からダウ…

Clojure勉強日記(その21 varを使用したスレッドローカルな状態管理

こんにちは。STMの機構を用いた状態更新が完了し、次はvarの確認に入ります。 defやdefnの呼び出しは、メタデータ:dynamicが与えられると動的なvarになるとのことです。・・・わかりませんね(汗 なので、やはりこちらも一度書いて試してみます。 ルート束縛…

Clojure勉強日記(その20 エージェントを使った非同期更新

こんにちは。前回に続いて状態更新ものです。 これまでまとめていたrefとatomは「同期的な更新」を扱っていました。 ここで言う同期的な更新とは、「関数呼び出しが完了した時点で状態の更新も完了している」ということを指します。ですが、Clojureでは非同…

Clojure勉強日記(その19 アトムを使った非協調的、同期的な更新

こんにちは。では続きに入ります。前回はrefを用いたSTMについて書いていましたが、Clojureには別の方式として「アトム」があります。違いとしては・・下記です。 複数のrefの更新はトランザクションを使って協調させなければならなかった。 アトムは単一の…

Clojure勉強日記(その18 ref とソフトウェアトランザクショナルメモリ

こんにちは。前回まででとりあえず関数型プログラミングの流儀の入口のようなものが完了し、 次は並行性、並列性、ロック・・と、今度は関数型を使うことによる具体的な利点を確認する内容です。 1.Clojureが用意する参照型 まず、初めにClojureが用意してい…

Clojure勉強日記(その17 より複雑な再帰

こんにちは。今回は以前試した再帰よりより複雑なケースを用いて再帰を試していく内容のようです。 1.相互再帰 言葉の通り、相互再帰とは2つの関数が互いを呼び合う再帰です。 AがAを呼んでそれがAを呼ぶ・・・という形ではなく、AがBを呼び、BがCを呼び、C…

Clojure勉強日記(その16 より「書かずに」すませる方法

こんにちは。とりあえず遅延シーケンスを体験したので、 次はよりClojureの機能を使って簡単に済ませる方法のようです。 何回パターンが発生する? 下記のようなベクタを考えて、 [:A :B :B :A :A :B] A → Aのようなパターンが発生する回数が何回あるかを考…

Clojure勉強日記(その15 関数型プログラミングの概念

こんにちは。シーケンスについて一段落し、ついに本筋っぽい個所に入ってきます。 関数型プログラミング=FPとして以後書きます。FPによるコードが書きやすく、読みやすく、テストしやすく、再利用しやすい理由として、 下記の理由があげられています。 …

Clojure勉強日記(その14 Clojureにおけるシーケンスの特徴とJavaオブジェクトの扱い

こんにちは。そろそろ、書籍も説明的な内容が増えてきたので単にべた書きではなく、 理解したことをまとめていく方針を取ります。 1.遅延シーケンスと無限シーケンス JavaにあってClojureにないシーケンスの一番の特徴がこの遅延シーケンスと無限シーケンス…