bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

2014-01-01から1年間の記事一覧

Haskellの真髄に迫る - 一般化代数的データ(8)

1.雑記 米田の補題を用いて、射を集合に、逆に、集合を射に変換できることが分かったが、この原理を利用したのがオペレーショナル・モナドである。このブログにも、オペレーショナル・モナドを用いた例を「Haskellで分野向けの機械を開発する」で紹介して…

XMOS (イベント駆動・並列スレッド)プログラミング(3)

1.簡単なライン・トレース・カーを作成する 1.1 仕様 模造紙の上に黒い線を描き、この線に沿って車が動くようにする。原理は、1)左右に反射型フォトセンサーを用意する。2)両方の反射型フォトセンサーとも白い面を検出している場合には、車はそのまま…

XMOS (イベント駆動・並列スレッド)プログラミング(2)

1.ベンディングマシンを実現する 1.1 仕様 次の状態遷移図(Moore Machine)で表わされるベンディングマシンがあったとする。これを実現することを考える。 このベンディングマシンでは、5円と10円が使えることになっている。投入金額が20円以上になる…

XMOS (イベント駆動・並列スレッド)プログラミング(1)

1.ボタンLEDを光らせる 1.1 プログラムを作る ボタンのLEDを光らせるプログラムは次のようになっていた。 #include<platform.h> out port bled = PORT_BUTTONLED; int main() { bled </platform.h>

Haskellの真髄に迫る - 一般化代数的データ(7)

1.一般的代数的データ型に米田の補題を利用 米田の補題の説明にだいぶ紙幅を割いてしまったが本題に移ることにする。これまで、長さ注釈つきのリストは一般化代数的データを利用して、次のように定義していた。 {-# LANGUAGE GADTs #-} data Z data S n da…

Haskellプログラミング講座(中級編) - 目次

目次 1. ライプニッツの公式から円周率を求める 2. Haskellでクイズ「嫉妬深い男たち」を解く(1)、(2)、(3)、(4)、(5) 3. Haskellを利用して簡単な会計システムを実現する(1)、(2)、(3)、(4)、(5) 4. 乱舞するメッセ…

Haskellの真髄に迫る - 一般化代数的データ(6)

1.米田の補題 圏論の重要な概念のひとつに米田の補題がある。これは次で表される。\({\mathcal C}\)を圏とした時、任意の\({\mathcal C}\)の対象\(A\)と関手\(F: {\mathcal C} \rightarrow {\bf Sets}\)に対して \({\rm Nat}({\rm Hom}(A,-),F) \cong F(A)…

Haskellの真髄に迫る - 一般化代数的データ(5)

1.米田の補題 圏論の重要な概念のひとつに米田の補題がある。これは次で表される。\({\mathcal C}\)を圏とした時、任意の\({\mathcal C}\)の対象\(A\)と関手\(F: {\mathcal C} \rightarrow {\bf Sets}\)に対して \({\rm Nat}({\rm Hom}(A,-),F) \cong F(A)…

Haskellの真髄に迫る - 一般化代数的データ(4)

1.米田の補題 圏論の重要な概念のひとつに米田の補題がある。これは次で表される。\({\mathcal C}\)を圏とした時、任意の\({\mathcal C}\)の対象\(A\)と関手\(F: {\mathcal C} \rightarrow {\bf Sets}\)に対して \({\rm Nat}({\rm Hom}(A,-),F) \cong F(A)…

Haskellの真髄に迫る - 一般化代数的データ(3)

1.リストの長さを整数で ここまで、リストの長さは、ZとS nを用いて表してきたが、リストの長さを分かりやすくするために、整数で表すことにする。そこで、自然数を表す型クラスを準備する。ここでは、これはNatで表すこととする。そして、この型クラスは…

Haskellの真髄に迫る - 一般化代数的データ(2)

1.長さ注釈つきのリスト 前回リストのつくり方を説明したが、ここでは、Gonzalezのブログを参考に、長さを注釈として持つリストを考えることとする。 長さは、二つのデータ型で表すことにする。一つは長さをゼロとするもの、他の一つは、要素を一つ加えたこ…

Haskellの真髄に迫る: 一般化代数的データ(1)

1.代数的データ型の「代数」は何を意味するのか 代数的データ型という言葉はHaskellを始めた人にとってはなじめない言葉だ。代数という言葉の意味は、そのままとれば、数を文字で置き換えるということになる。代数的データ型を用いて整数(Int)を定義しよう…

Haskellでニューラルネット

1.ニューラルネット ニューラルネットは元来あまり好きではない。人間の脳神経網を表現するモデルとして使われてきたのだが、脳神経網とニューラルネットワークとの間の対比関係を得る手段がないことが嫌いであることの最大の理由である。しかし、昨日、谷口…

Haskellで最大公約数、最小公倍数を求める

1.重要な概念 Haskellの良いところは、簡単にプログラムが書けること。実現するプログラムの意味するところが分かれば、そのまま記述すればよい。JavaやCなどの命令型プログラミング言語ではそうはいかない。意味するところを分析しそれを手順として示さな…

Haskellで分野向けの機械を開発する(3)

1.窮屈からの脱出 数式から木構造を生成する方法が、オペレーショナル・モナドに移行したが、コードが増えた割にはあまりご利益がない。数式の指定が固定的で、キーボードからの自由な入力にはなっていない。そこで、オペレーショナル・モナドの拡張版(モ…

Haskellで分野向けの機械を開発する(2)

1.数式から木構造を作成する機械 「Haskellで数式をビジュアルに」のところでも説明したが、一次元に書かれた数式を二次元の木構造に変換することができる。例は以下のとおりである。 そこで、オペレーショナル・モナドを利用して、数式から木構造を作成す…

Haskellで分野向けの機械を開発する(1)

1.分野向けの機械 Haskellは純粋関数型言語である。自販機、改札機、ロボットなどのある分野に向けた機械に本来備わっている状態を扱うことはあまり得意としていないが、これを可能にしてくれるのが、オペレーショナル・モナドである。オペレーショナル・…

Haskellで数式をビジュアルに(2)

2.プログラムで表現 数式を木構造に変換するプログラムをHaskellで実現する。数式が木構造に変換される様子をもう一度、図で示すと次のようになる。 複雑すぎて、Javaで実現しようとは思わない。直感的にHaskellでも苦労するかなと想像したが、取り越し苦…

Haskellで数式をビジュアルに(1)

1.木構造 数式は見慣れているため、簡単に理解できるように訓練されてはいるが、それでも、少し込み入ってくると、どのように計算したらよいか困るときがある。そのような時、木構造で描くとわかりやすくなる。3*4+5*6を木構造で表すと下図のようになる。 …

解釈次第で!(2)

1.三目並べ オペレーショナル・モナドには、いくつかの例が紹介されてるが、その中から、三目並べ(Tic Tac Tow)を詳しく調べてみる。オペレーショナル・モナドの使用に当たっては、次のモジュールをロードしておく必要がある。 cabal install operational …

解釈次第で!(1)

1.あなたは何を この文章はキーボード上のキーを打ちながら作成している。でも、もし、ワープロのプログラムではなく、ゲームのプログラムが動いていたなら、敵の攻撃をかわすべく、シューティングに夢中になっているかも知らない。このシューティングもキ…

ポーチトエッグ(落し卵)

1.朝はポーチトエッグで 泊まったお客さんのために、珍しい卵料理を試みた。ポーチトエッグ(Poached Egg)である。これもオーストラリア人のマイクから教えてもらった。彼はイギリス育ち、イギリスで博士号まで取って、オーストラリアの大学にポスドクでや…

キャロルおばさんのキャセロール

今日も昨日に増してお客さんが多数。朝から夕飯の用意をすることにした。今日も合理的な料理作りを楽しむために、イギリス料理。日本の食卓でイギリス料理が話題になることはないが、数は多くはないが、知っている限りでは、イギリス料理は本当に合理的にで…

鯛とアサリの蒸し焼き

昨日は、お客さんがあって、食卓が賑やかなので、少し豪華な料理を作ってみた。鯛の蒸し焼きはオーストラリアにいたときに、同僚のピーター(オーストラリア人)から学んだもの。彼は、イギリス人のお母さんから教えられたそうなので、おそらくは、イギリス…

Haskellで遊ぼう = マルチメディア

1.マルチメディアの世界へ Haskellの話は数学やロジックの話が多く、ゲームやアニメーション、はたまた、音楽の世界とは程遠いと思うかもしれないが、そんなことはない。本としては、少し古いのだが、The Haskell School of Expressionがある。これに、コ…

凹むこともある多角形(3)

1.多角形の面積を求める 多角形が凸多角形であるときは、その面積を求めることは簡単である。例えば、多角形の頂点の列が\(v_1, v_2, v_3,..,v_n\)であるとき、\(v_1\)から\(v_3\)へ、さらに\(v_1\)から\(v_4\)へ、同じように\(v_1\)から\(v_{n-1}\)まで、…

凹むこともある多角形(2)

1.凸多角形 多角形には凸多角形と凹多角形とがある。多角形の面積を求めるときは、三角形に分解してぞれぞれの面積を求め、最後に、それらの総和を求め、これを多角形の面積とする。しかし、凹多角形の場合には、間違ったアルゴリズムを利用すると、多角形…

凹むこともある多角形(1)

1.タイプを用意 多角形は、コンピュータ・グラフィックスやアニメーションを行うときに最も基本的な図形である。多角形には、三角形も、四角形も含まれるし、辺の数をとても多くしてあげると、円にも楕円にもなる。そこで、多角形を記述するのに必要な型シ…

数を整然と並べる

数がきれいに並んでいるものに、等差数列と等比数列がある。Haskellで記述する。 1.等差数列 等差数列は、各項の差が同じものをいう。例えば、奇数を小さい方から大きい方に並べると1.3.5.7…となるが、これは、最初の値(初期値)が1、差が2の等差数列で…

Haskellでウェブ・アプリケーション(4)

1.ブログを作成する 次の課題は「簡単なブログ」である。これは次の図に示すように三種類の機能を有している。一つはこれまでの記事の一覧表示であり、二つ目は新しい記事の入力であり、三番目は選択された記事の内容の表示である。 この課題は二つの相互…