2006-11-01から1ヶ月間の記事一覧

課題

亀プログラム処理系の発展を考える。 課題は、 パースエラー時、エラーメッセージ出力 BNFデータ構造のダミーコンストラクタを消す Expandで新しい木構造を作るのはメモリのムダ遣いなのでやめる

はじめてのモナド

まず課題1。亀プログラム処理系プログラムがエラーメッセージを返せないのは、すべてのエラーがMaybeモナドのNothingになってしまい、それ以外の情報を抽出できないため。一方で、Maybeモナドを亀プログラム処理系プログラムで使用するのは自然。なぜならモ…

書いてみたプログラム

亀プログラム。 もともとは、「増補改訂版Java言語で学ぶデザインパターン入門」のInterpreterパターンの章で出てくる簡易言語(亀プログラム)の解釈をHaskellで書いたらどう書くのかという試み。BNF参考 <program> ::= program <command list> <command list> ::= <command>*end <command> ::= <repeat command> | <primitive command> <repeat command> ::= repeat <number> <command list> </command></number></repeat></primitive></repeat></command></command></command></command></program>

型、型クラスとMaybe

亀プログラムに向けて型と型クラスの練習。go/left/rightだけ考えてみる。型クラスはJavaでいうトコロのインタフェースに相当する。型クラスの関数を実装してインスタンス化。ムリヤリMaybeも入れてみるが、そのせいなのかなんなのかいまいちピンと来ず。ダ…

再帰的プロセスと反復的プロセス

再帰的手続きには、再帰的プロセスと反復的プロセスのふたつの種類がある(そうだ)。 階乗計算の例で言うと、 再帰的プロセス -- 階乗(再帰) myfact_r n = if n == 1 then 1 else n * myfact_r (n-1)これは遅延演算を行っている。再帰の最後になってみないと…

フィボナッチ数計算(続 再帰的・反復的)

再帰的プロセスは、計算の木構造をめいっぱい展開することになる。 だから再帰的プロセスより反復的プロセスのほうが低コスト。 以下、反復的プロセスが、再帰的プロセスよりも低コストになる典型例 再帰版フィボナッチ数計算 -- フィボナッチ数(高コスト) m…

listとwhere letとwhere

listとwhere letとwhereの使い分けがいまだによくわからない。

買いました

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門作者: 青木峰郎,山下伸夫出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/06/01メディア: 単行本購入: 25人 クリック: 314回この商品を含むブログ (320件) を見る熟読する…

ニュートン法による平方根・立方根

平方根 -- 平均値 myaverage x y = (x + y) / 2 -- 平方根 mysqrt x = let { good_enough guess y = ( abs((guess*guess - y) / y) < 1e-10 ) ; val_improve guess y = myaverage guess (y/guess) ; sqrt_iter guess y = if (good_enough guess y) then gues…