2013-06-01から1ヶ月間の記事一覧
こんにちは。いよいよ大詰め。 今まではコマンドライン上でしか動作しなかったゲームをGUI上で表示してみます。■snake.clj:Graphicの塗りつぶし処理 ; Fill-Points (defn fill-point [graphic pt color] (let [[x y width heignt] (point-to-screen-rect pt…
こんにちは。では、SnakeGameの状態更新部分を進めていきます。 今回、状態が更新されるタイミングは以下の3つです。 ゲームを開始する。 ターンごとにヘビが位置を更新する。リンゴが食べられていたらヘビの長さを伸ばし、リンゴを再配置する。 ヘビの向き…
こんにちは。今まで確認してきた状態管理のAPIを使い、「SnakeGame」を作ってみます。 と言いつつ、そもそもSnakeGameを起動するところからしてはまったのでそこから(汗まず、前提として「https://github.com/stuarthalloway/programming-clojure」からダウ…
こんにちは。STMの機構を用いた状態更新が完了し、次はvarの確認に入ります。 defやdefnの呼び出しは、メタデータ:dynamicが与えられると動的なvarになるとのことです。・・・わかりませんね(汗 なので、やはりこちらも一度書いて試してみます。 ルート束縛…
こんにちは。前回に続いて状態更新ものです。 これまでまとめていたrefとatomは「同期的な更新」を扱っていました。 ここで言う同期的な更新とは、「関数呼び出しが完了した時点で状態の更新も完了している」ということを指します。ですが、Clojureでは非同…
こんにちは。では続きに入ります。前回はrefを用いたSTMについて書いていましたが、Clojureには別の方式として「アトム」があります。違いとしては・・下記です。 複数のrefの更新はトランザクションを使って協調させなければならなかった。 アトムは単一の…
こんにちは。前回まででとりあえず関数型プログラミングの流儀の入口のようなものが完了し、 次は並行性、並列性、ロック・・と、今度は関数型を使うことによる具体的な利点を確認する内容です。 1.Clojureが用意する参照型 まず、初めにClojureが用意してい…
こんにちは。今回は以前試した再帰よりより複雑なケースを用いて再帰を試していく内容のようです。 1.相互再帰 言葉の通り、相互再帰とは2つの関数が互いを呼び合う再帰です。 AがAを呼んでそれがAを呼ぶ・・・という形ではなく、AがBを呼び、BがCを呼び、C…
こんにちは。とりあえず遅延シーケンスを体験したので、 次はよりClojureの機能を使って簡単に済ませる方法のようです。 何回パターンが発生する? 下記のようなベクタを考えて、 [:A :B :B :A :A :B] A → Aのようなパターンが発生する回数が何回あるかを考…
こんにちは。シーケンスについて一段落し、ついに本筋っぽい個所に入ってきます。 関数型プログラミング=FPとして以後書きます。FPによるコードが書きやすく、読みやすく、テストしやすく、再利用しやすい理由として、 下記の理由があげられています。 …
こんにちは。そろそろ、書籍も説明的な内容が増えてきたので単にべた書きではなく、 理解したことをまとめていく方針を取ります。 1.遅延シーケンスと無限シーケンス JavaにあってClojureにないシーケンスの一番の特徴がこの遅延シーケンスと無限シーケンス…