bitterharvest’s diary

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

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

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

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

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

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

数を整然と並べる

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

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

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

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

1.回文を作る 最初の例は入力したテキストをそのまま出力していたが、今回は、加工する。そこで課題は「入力されたテキストと、それを逆順にしたテキストを接続して表示する」とする。このサービスをMirrorということにする。前回と同じように、まず、コン…

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

1.ブログの構築 ウェブで紹介されているHaskell web programmingは、簡潔で分かりやすい例題である。その内容に沿って説明し、yesogの活用法を学ぶこととする。 2.エコーで返す 最初の課題は、「/echo/テキストにアクセスしたら、そのテキストを返す」と…

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

1.ウェブ・アプリケーション・システムの構造 ウェブ・アプリケーションには毎日のごとくお世話になっている。このブログもウェブ・アプリケーションに一つであるし、困った時の検索エンジンや乗換案内などもウェブ・アプリケーションである。ウェブ・アプ…

細かく細かく分解する(2)

1.3次多項式の因数分解 2次の多項式の因数分解ができるようになったので、3次の多項式について考える。一般に、3次の多項式は\(p \times x^3 +q \times x^2 +r \times x + s\)と表すことができる。但し、\(p>0\)。これは因数分解できる場合には、\(a \…

細かく細かく分解する(1)

1.素因数分解 自然数を素数の積として表すのが素因数分解である。例えば、35という数は、素数5と7の積としてあらわすことができる。それでは自然数が与えられた時、それを素因数分解するプログラムを考えよう。与えらえた自然数を\(n\)とする。素数は次の…

Haskellでお絵かき(4)

1.フラクタル 数学的な模様で有名なのはフラクタルである。同じ操作を繰り返すことで、幾何学的に作成したとは思えないほどの面白い模様を作り出してくれる。マンデルブロのフラクタル幾何学を見ると、楽しい図形が沢山出ている。今回は、その中のいくつか…

Haskellでお絵かき(3)

1.自然数を数学的な模様にする 中学生のとき、素因数分解を学んだ。与えられた自然数を、割り切れない数(素数)の積で表したものだ。例えば、102は素数17,3,2の積で表すことができる。 自然数をその構成要素である素数を用いて絵画的に表すことを考えたのは…

Haskellでお絵かき(2)

1.円模様(アポロニウスのネット) Diagramsのギャラリーを見ていると、一つの円の中に外接しあう大小の円が模様のように描かれているものがある。それはアポロニウスのネットと呼ばれている。これは、デカルトの円定理を用いて作られたものである。 デカル…

Haskellでお絵かき(1)

1.お絵かき 論文を執筆する時、説明のために必ずいくつかの図を描く。特に、概念が難しい時は、図の役割はとても大きい。この頃は、Power Pointで図を描くことが多くなってきた。これは、Power Pointを用いると、割に簡単に描けることに起因している。しか…

乱舞するメッセージ(4)

1.会計システムを完成させる 様々な準備が整ったので、会計システムをいよいよ完成させることにする。これまでのシステムの欠点は、複雑なメッセージの送受ができないことと、担当者ごとにメッセージを送るための通信路を設けていることである。会社の規模…

乱舞するメッセージ(3)

1.帳簿をつける 担当者間でメッセージを送ることが可能になったので、帳簿をつけることにする。Haskellでのプログラムが、他の言語でのプログラムと異なる点は、変数の値を変えられないということである(STMは例外で、値の変更を安全におこなえる仕組みを…

乱舞するメッセージ(2)

1.小さな会社 小さな会社の従業員は、購買担当者、営業担当者、経理担当者の3人とし、小さな会社は現金取引で商いをしているとする。購買担当者は仕入れをしたとき、経理担当者にその個数を伝えるものとし、販売担当者は販売をしたとき、経理担当者にやは…

乱舞するメッセージ(1)

1.概略 複数のエージェントがトランザクション処理を行う場合は並行処理となる。並行処理においては、複数のエージェントが一つの資源を争う場合がある。会計システムであれば帳簿であるし、航空券のチケット予約システムでは座席ということになる。 並行…

Haskellを利用して簡単な会計システムを実現する(5)

1.小さな会社を運用してみる 小さな会社での登場人物が独立したエージェントとして活躍すると、並行処理での会計システムの稼働状況を観察できる。そこで、乱数を発生させ、営業の担当者は0.1-0.5秒の間のランダムな時間に50個の商品を販売し、購買の担当…

Haskellを利用して簡単な会計システムを実現する(4)

1.取引をHaskellで記述する 勘定科目が用意できたので、簡単な取引が行えるようにする。この会計システムを利用する人は、小さな会社にも関わらず、購買の担当者、営業の担当者、会計の担当者、投資家の4人とする。 購買の担当者buyerは、商品を購入する…

Haskellを利用して簡単な会計システムを実現する(3)

1.勘定科目 勘定科目は、資産に関係する科目、負債(資本金を含む)に関係する科目、費用に関係する科目、売上に関係する科目に分けることができる。総勘定元帳などの帳簿をつけるときは、資産に関する科目と費用に関係する科目の現在高は借方に記述し、負債…

Haskellを利用して簡単な会計システムを実現する(2)

1.トランザクション処理 会計システムの一つの特徴はトランザクション処理である。会計システムにおいては、仕訳伝票が処置の一つの対象となる。ウェブベースのシステムであれば、ユーザの事務所にある端末、あるいは、コンピュータから伝票が入力され、そ…

Haskellを利用して簡単な会計システムを実現する(1)

1.会計システム 会計システムは、企業の基幹システムの中でも最も重要なシステムの一つである。会社の収支がどのようになっているか、資産は増えているのか減っているのか、預金も含めて現金は十分に確保されているのかなど、会社を運用していくうえで、重…

Haskellでクイズ「嫉妬深い男たち」を解く(5)

1.次の場面を求める 舟が一方の岸から他方の岸にわたり、今度は逆に折り返してきたときの場面を得る関数nextShotを考える。折り返しの時は、乗客となる候補がいくつかあるので、複数の場面が存在することとなる。この関数は、岸についたとき乗客を降ろし、…

Haskellでクイズ「嫉妬深い男たち」を解く(4)

1.安全な組み合わせを求める 与えられたGroupから、乗船するGroupと岸に残るGroupとをそれぞれフィールドにしたレコード(これはTwoGroupsと呼ばれるレコード型を有する)のリストを返してくれる関数をseparateGroupとする。この関数は、先に説明した場合分…

Haskellでクイズ「嫉妬深い男たち」を解く(3)

1.奇数と偶数 舟に乗る組合せを観察すると、似たようなパターンがあることに気が付く。例えば、女性二人が乗船するパターンには、(女1, 女2),( 女2, 女3),( 女3, 女2)の三つがあった。このパターンは、女性二人が乗船するという意味においては同じで…

Haskellでクイズ「嫉妬深い男たち」を解く(2)

1.人工知能における幅優先探索 「嫉妬深い男たち」を解くための良いアルゴリズムは見つかっただろうか。アルゴリズムが見つかったとしても、クイズが与えられるたびに、それを解くためのアルゴリズムを見つけていたのではきりがない。人工知能の分野では、…

Haskellでクイズ「嫉妬深い男たち」を解く(1)

1.嫉妬深い男たち よく知られている問題だが、旅行をしている3組のカップルがいる。このカップルたちは、飛行機や車を使った旅行には飽きてしまったので、旧道が残る東海道を徒歩で旅行していた。それぞれのカップルは仲は良いのだが、唯一の欠点は、どの…

ライプニッツの公式から円周率を求める

1.円周率を求める ライプニッツは一七世紀の哲学者、数学者、科学者であり、政治家、外交官でもあった。彼は、ドイツ東部のライプチヒの出身である。Haskellを学んでいる人であれば、モナドという言葉を知っていることと思うが、哲学用語でのモナドという…