Haskell

GHC 6.4

うわああああああ。 今見たらGHC6.4がついにリリースされとる。 去年の時点ではの11月にリリースとか書いてあったから、 それから毎日見に行ってましたよ。 それが12月になり、1月になり、2月になり…。 やっとですな。 何はともあれ、これでOpenGLでテクスチ…

この前のをHaskellで解いてみる。

最近はHaskellerらしからぬことばっかりやっていたので、 久しぶりにHaskellを使うことにした。 ここから、割合簡単なADIをHaskellで実装。 とりあえずリハビリということで。 しかし、副作用がないと良い。見通しが立てやすいね。 A問題 import Data.List i…

Template Haskell

はじめに Template Haskell というものを勉強してみた。 そういうわけで、資料を探してみたのだが、 日本語の資料は見事なまでに皆無だったので、 (Haskellで、しかも試験的な機能だから止む無しか) 英語の論文を読むことになった。 10ページほど読むのに3日…

汎用オセロサーバ

なぜかここでオセロ。 ここ一週間ほど断続的に作っていました。 名目はオセロサーバ。 Haskellでのネットワークプログラミング練習など。 結果は思ったより良好です。 概要 ネットワーク越しにオセロの対戦を実現するプロトコルの実装。 実装は、かなり趣味…

メモライズ

漸くたまっていたものを吐き出せる時が来た。 そういうわけで、まずは軽い話題から。 今回はHaskellでメモライズを行う方法。 Haskellは遅延評価でグラフ簡約なのでメモライズとの親和性は 良いように思うのだが、実際にやろうとすると自力では方法を見出せ…

続・正格性解析

GHCも正格性の解析を行っているということを 本体サイトの掲示板やこちらのほうでご指摘頂いた。 いいかげんなことを書いて申し訳ないです。 こう、書けば書くほどボロが出るのがこのページでして…。 というわけで、もうちょっとちゃんと考えてみることにし…

正格性アナライザー

最近純粋関数な話題がご無沙汰に…。 このままでは駄目なので、今日はCleanの話を。 ここのページ、Haskellのことしか書いてないけど、 Cleanも似たような言語なので一時期勉強していました。 そのときはCleanのどうにもこうにもパフォーマンスハックな部分が…

高効率コードを書くのは難しいのか

Haskell でのパフォーマンスチューニングを読ませていただいた。 リンク先の英語のページは英語なので(…)読んでいないが、 まぁ、コードで雰囲気は伝わってきた。http://shootout.alioth.debian.org/lang/ghc/wc.ghc.htmlいかにもご大層である。 Haskellでこ…

なぜ、C言語にはgotoが必要なのか?

(注:以下の文章において、C言語とはC/C++をさすものとお考えください) gotoは今から30年以上も前のダイクストラ先生による撲滅運動の 甲斐もあってかどうなのか、今日では良くないものの代名詞のように なっている。良くないということの主な理由はプログラ…

Domain Specific Language (或いはコンビネータ言語)

というわけで、前回の続きである。 続きである、とはいっても、前回のようなしょうもない話ではない。 (…しかしながら、なんだかぐだぐだで中途半端な話に…)。 唐突だが、何かを実現するのに小規模な言語を実装するのが 適当だと判断された場合、いかなる解…

Re:型を返す関数

dependent type …は知らなかったです。 一通りPDFとか読ませていただきました。 そういえば、C++のtemplateにも値をとるものがありましたね。 うーむ…私もまだまだHaskellについて知らないことだらけですね… 精進します。

Re:制限された関数だけクラスのインスタンスにする

うーん。ghcの拡張機能にあるのですか。 instance Manipulator (Handle -> IO a) where a この前の関数をインスタンスにしてみる。 なるほど、普通に出来ますね。

ソクラテスもどき

最近M氏との対話からネタというか疑問が生まれることが多い。 お前はソクラテスか、…という人はおらんと思うけど、 今回もHaskellで引っかかったネタを。(毎度勝手に書いてごめん) 氏いはく、 型を返す関数は作りたい。 ということらしい。 range :: Particl…

マニピュレータ

最初にお断りしておくのだが、今回の文章は Cマガ2004年9月号(つまり今書店に行ったら売ってあるやつ)の 「επιστημηのオブジェクト工房」の記事をかなり参考にしたので そちらをお持ちなら先に読んでもらえるとよいかもしれない。 まぁ、話題はiostreamに対…

マニピュレータ

表題に書いたネタだけど、えらく時間がかかってしまったので やっぱりまた今度に。

うんざりするほど優柔不断

今、なんというかいつもより多少規模の大きなプログラムを書いている。 というか、すんなり書けていればとうの昔にこのページのネタに なっている予定だったのだが、つまりまくりなのである。 別に全く困難なものではないのだが、私が優柔不断すぎていけない…

Re: Re: Functor と Monad

うーむ…効率ですか。 しかし、例えばリストの例だとそんなに問題になるレベルの 差ではないように思います。Maybe、IOも然り… しかし、やっぱりそのうち圏論も勉強しないといけないなぁ。

Functor と Monad

某M氏とFunctorについて語っていたらふと疑問が。 (ネタにしてごめん…) 彼は今カテゴリーを勉強しているらしいので、 私などよりよっぽどまともな解を見出せるような気もするが、 まぁ、一応…。 とりあえず疑問に感じたのは、 fmap と liftM っておんなじや…

二人零和有限確定完全情報ゲーム

タイトル、のようなゲームには必勝法が存在する。 そのこと自体は直感的にも理解できるし、証明も簡単だろう。 さらには最善手も非常に簡単なアルゴリズムで計算できる。 が、計算できるものと現実的に計算できるものの間には 大きな開きがあり、現実的に計…

23個の道は遥か

どうも色々と考え違いが出てくるなぁ。 まぁ、良いか。 Adapter これはいかばかりか一般的過ぎるアイデアなのではなかろうか? 既存の実装を用いて必要とするインターフェースを実装する、 というのをAdapterパターンということにしておこう。 class Banner{ …

非決定性計算

なんだか毎回続く、とか書きながら違うことを書いているような気がする。 今回は、リストモナドを使うと非決定性計算が記述できるという話。 また微妙に脇にそれる。 そういやSICPにamb評価器があったよなぁとか、 それをすんなりかけそうだなぁとか。 とい…

追記:一つのAggregateに複数のIterator

AggregateとIteratorが分かれていることで複数のIteratorを作れるようであるが、 iterator()のインターフェースが決まっているので、 どっちをもらうか選択は出来ないだろう。 しかしまぁ、どっちがきても問題にならないようにIteratorのインターフェースを …

反パターン

というか、そんなことはどうでも良くて、 色々中途になっている話題もどうでも良くて(良くないか)、 デザインパターンである。 デザインパターンは私の高校生時代の心の拠り所で、 盲目的に信用していたものなのであるが、 関数プログラマに転身した(…あるい…

継承

Haskellでも多段の継承関係を持ったものを記述すること出来るよね…? というか、なんというか、Preludeの数関係のクラスがそうなっている。 実装を持ったものの多重継承も出来るような気がする。 #include #include using namespace std; class A{ public: vi…

モナド・中級

ゲームライブラリをモナドにしようと思ったのだが、 いざ自分で書いてみようと思うとさーーーーっぱり書けない。 というか、完全に掌握できている(と思っている…)のが IOモナドとMaybeモナドとListモナドぐらいなものなのだ。 そういうわけで、Monad Templat…

フィボナッチ in L

10689番が英文が短かったので解いてみた。 昨日のに比べて簡単過ぎたかもしらん… 解いてる人も多いし。 問題はf(0)=a,f(1)=b,f(n)=f(n-1)+f(n-2)の漸化式で定められる 数列fの何番目かを求めるというもの。 初期値a,bで生成される数列のn番目,下位m桁を出力…

シーン抽象及び高階シーン型(ゲーム設計その6)

シーンとは何だろうか。 ここでまずシーンについて再考してみることにする。 ゲームを割と区切りのいいところで分割したものだと考えると ゲーム=(シーンの集合) ということになる。 シーン間に順序なり主従関係なりコーラーコーリー関係?なりを 定義できれ…

シーンレベル抽象 (ゲーム5回目?)

これまでは非常にプリミティブなレベルでの設計方法… というか継続を用いたゲーム作成の方法を模索するのに 終始していたのであるが、実際の問題として大規模なものを 作成しようとなるとそれだけでは不十分である。 ゲームは一般的に大きくシーンに分けて設…

不動点演算子の使い方

ねたに困ったときはライトな?話題でも。いつもどおりだらだらと。 λ計算にて再帰的な関数の意味づけに不動点演算子というものを用いる。 不動点演算子(Y)は、λ式Mに対して Y M = M (Y M) を満たすようなλ式で、 具体的には Y = λf.(λx.f(x x)) (λx.f(x x)) …

6502 emulator

先日の6502の復習を元にエミュレータを書いてみた。 今でこそλ教信者に成り果ててしまった感じの私であるが、 昔はごりごりチューニングが大好きな健全な(?) 若者なのであった。 http://fxp.infoseek.ne.jp/haskell/cpu.hs とりあえずこんな感じ。周りを作…