Haskell

ブログ一部引っ越し

「タイプするサル」からプログラミング関連の記事を独立させます。 http://d.hatena.ne.jp/nextliteracy/ とりあえず、"Crandall"シリーズを移しました。 残りも順次、引っ越す予定です。引っ越しの理由ですが、 プログラミングが「タイプするサル」では困る…

世紀の発明?

私は、Haskellの$演算子や.演算子がきらいです。だって読む順番が逆だから。 数学ではそう書く?数学で函数合成なんてだらだら続けないでしょう?でもプログラミングだと必要な処理は書き下します。 Project Eulerの問題4を例にします。 A palindromic numbe…

Programming Web

CESを見学にLas Vegasに行ってきました。 行きの飛行機の中で、"The Social Network"を見たこともあってか、たくさんの刺激をもらい、あれこれ思いつきました。 (成功を狭義で考える優れた人たちの多くは、やり遂げてこそという話をされますが、私にとっては…

Haskell入門

α-β刈りと遅延評価の関係が知りたくて、勉強がてらコードをいじりました。 ミニマックスでは独立だった同一階層の探索評価を独立ではなく候補値を渡しながら再帰的にしていくのがα-β刈り。遅延評価とは関係ありませんでした。でもなー、α-β刈りの本質は遅延…

Schemer's way

http://practical-scheme.net/docs/schemersway-j.html #Haskellじゃないけれど。 以前に「末尾再帰にがっかり」という日記を書きましたが、上の記事に明快な答えが書いてありました。 末尾再帰最適化でループ相当のパフォーマンスを実現できるようにしてお…

BiwaScheme

以前に冗談で、Javascriptでインタープリタ実装すれば、言語系のインストールを禁止しているiPhoneでプログラミングができると書きましたが、既にされている方がいました。 http://www.biwascheme.org/ (残念ながら、現在、サンプルが動かない(IE8でもSafar…

パーサ

久しぶりにHaskellで短いプログラムを書きました。バイナリパーサ。 ステート使わずに、再帰で云々と書いていたらぐちゃぐちゃになって、「なんだこの腐った言語は!」と怒っていましたが、どうパースするかでなくて、データ構造を定義していったら、すっき…

ソフトウェアトランザクションメモリ

Grand Central Dispachの元ネタを探していたら、代わりに?STMが見つかりました。 探索の並列プログラムがすっきり組めそうなら、またHaskellいじろうかな。 Beautiful CodeのJonesさんの記事、わかりにくいのは私だけ?

Leksah再び

GHCを6.10.2に上げたことを機会に、HaskellのIDE, Leksahのインストールにもう一度挑戦し、成功しました。 すっかり、インストールと動作確認マニアの週末。

末尾再帰にがっかり

関数型言語で、私にとって魅力的に思えたキーワードに末尾再帰最適化があったのですが、SICP読んでみたら、(帰納プロセスじゃなくて)繰り返しプロセスの再帰に関してスタックを消費しない処理系ということだったのですね。 繰り返しプロセスの実装は、ステ…

do文と遅延評価

ようやくStateモナドとIOモナドの同居ができるようになりました。(モナド変換子) それとは全然関係ないですが、途中、Boolを内包するモナドを変数に束縛してb1 || b2という論理式を使い、b1が真ならb2は評価されないと思い込んだらはまりました。 -- ハマ…

Stateモナド

大域変数を使ったLispの練習問題をHaskellで挑戦していて、状態を全部、引数にして戻り値にするしかないなー、大変やと思ったら、それをしてくるモナドがありました。 「人工知能のためのLISP入門」p.126 -- -- 「人工知能のためのLISP入門」 by Peter Coxhe…

思考の経済

関数型言語(Haskell)に触れてみて、改めて、言語表現というものは「思考の経済」の上に成り立っているなと思いました。 できることは変わらない。(パフォーマンスは変わるけど。)シンタックスシュガーと言ってしまえばそれまでですが、何かをするために記…

探索

Haskellの詰め碁アルゴリズムを、ゲームツリーを先に定義してから探索を掛けるように実装し直したら、きれいに書けたけど、やたらメモリを食ってスワップだらけのプログラムになってしまった。手順ではなく盤面でゲームツリーを組んだのが富豪的過ぎたか。

Haskellの欠点?

関数型なら更に単体テストが有効だろうと、これを機会に単体テストの習慣を身につけようと思ったのですが、ファイルから関数への入力データを読み込んで結果を確認するだけのことがHUnitでできない。 ファイルから読み込もうとすると、IOモナドの世界に入り…

デザインパターン

GOFの「オブジェクト指向における再利用のためのデザインパターン」はどうしてもなかなか読めない本の1つで、デザインパターンというのは大規模プログラマーのためのものだなと思っていました。それが、変数と関数に差がないHaskellを使ってみると、高階関…

Leksah

Haskellの統合開発環境Leksahが、インストールできない。Macでは無理なのか。そうとも思えないけど…

Haskellの副作用

Haskellに副作用が見つかったというお話ではありません(笑)。 Haskellって、(限定的な場合だと思いますが、)仕様とコードが非常に近いので、プログラミングするのにパソコンが必要ないんですね。頭の中でつらつらと考えて、ああいけそうと思った時に書い…

Parsec

HaskellのParsecを使ってSmart Game Formatのパーサがやっとできました。再帰データ型やらShowクラスやらParsec以前に頭に入れることがあって大変でしたが、終わってみると、なるほど実装がほとんど見えない仕様に近いコードになる。 パースした後のデータ構…

Haskellのデバッグ

詰め碁プログラムのリファクタリングを始めたら楽しくなって、案の定自炊が、納豆ご飯⇒おでん⇒外食と、止まってしまった。 Haskellプログラミングも詰め碁アルゴリズムの怪しいところを直そうとデバッグに入ったら、学習曲線がフラットになってしまった。 指…

Haskellの心地よさ

関数型ということに、まだしっくりという感じまでいきませんが、高階関数が自然に使えるのは気持ちがいいですね。Smalltalkもリファクタリングしていくと、関数型が適したアルゴリズムの場合、自然と関数型に近づいていきますが、高階関数となると「できる」…

Haskellのwhere節

where節が入れ子にできない。補助関数でガードが使いにくくなるじゃないか。

初めてのHaskellコード

人のコード眺めて、読みやすいように名前変換するだけじゃ物足りなくなって、もっとすっきり書けるかなと思った関数を書き直してみました。 longestInはリストのリストの中から一番長いリストを取り出す関数。 import List longestIn lists = last (sortBy c…

関数型言語とコンテナ

Haskellの詰め碁プログラムを読ませていただいて、少しずつ文法が頭に入っていきます。 Squeakで碁盤を作ったときは2次元アレイを実装して実現しましたが、このプログラムではIntMapを使っています。なるほど、再帰の中で碁盤を更新すると碁盤がどんどんコ…

ついにHaskell

親切なHaskell解説サイト「Haskell のお勉強」で詰め碁のプログラムがあったこともあって、ついにHaskell見始めました。確かに探索アルゴリズムを書きたくなるような言語です。美しい。 モナドは圏論を勉強してから(笑)。

スプレッドシート

関数プログラミングから何か感じたいと、"On LISP"を眺めてみましたが、ありがたい説法を聞いているよう。Erlangは使うことがあるかどうかわかりませんが、感じるものがあります。Smalltalkを触っていると、どうせならメッセージがリモートプロシージャで自…

関数型プログラミング

囲碁の思考ルーチンを設計しようとすると、思考の土台となるデータ構造を、頭の中でああでもないこうでもないと練るだけで時間が過ぎていきます。 オブジェクト指向だと、データ構造=クラス→ステートフルな世界に入って、思考がステートの変化なのか新しい…