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

Haskellコードで>>=を消し、doで統一する理由

端的にいうと、普通に普及してる手続きがた言語との対比がしやすいからである。>>=の利用コードは関数式としてみると識別子の表出順序の差が大きく(というか逆)、doの利用コードでは文列としてみたときのそれが小さい。そしてHaskellソースコードをすんなり…

JParsec

http://jparsec.codehaus.org/ Java5でのParsec実装のようだが、使いやすいのか?static import前提のようではある。chainl/chainrに相当するものがないように見えるが、buildExpressionParsersはあるので、内部で最適化しているようにも見える。 こうみると…

パターンマッチによるメソッド定義@Ruby

http://www.artima.com/rubycs/articles/patterns_sexp_dsls.html よりmultiというライブラリで class Example def initialize() multi(:method2, 0) { 0 } multi(:method2, Integer) {|x| @a + x } end def method1(x) return 0 if x == 0 return @a + x end…

コントラストの高いテーマに入れ替えてみた。

Java5で関数型パーザーを書くとしたら

実装は省きますが、 id:bellbind:20060530:1148969152 をJava5でそのまま実装するとしたら、以下のような感じでしょう。 class PState interface Parser interface Func public Parser run(indata data) class ParserBind implements Parser public ParserBi…

正しく動く JavaScript版 Parser

id:bellbind:20060529:1148843131 のコード設計で正しい文字列APIを使うようにして、さらに id:bellbind:20060530:1148941763 の識別子と対応付けたバージョン var PState = function (code, pos, result) { this.codeField = code; this.posField = pos; th…

JavaScript版stringParser

上のコードはMonadを利用して作ったstringParserが入ってます。 stringParser [] = do return [] stringParser (ch:t) = do result <- charParser ch results <- stringParser t return (result:results) これをJavaScript版で作るとしたら以下のようになる…

JavaScript版に対応させるHaskellでのParser実装

昨日のJavaScriptでの関数型パーザー( id:bellbind:20060529:1148843131 )を、きちんとする際、同等のHaskellコードと対応付けて説明を書こうと思った。両方作るんだけど、型の問題とかあるので、先にHaskellでParserを実装してみた。 data PState result = …

はてなダイアリーの編集のテキストエリアの幅は70じゃなくて81,2はほしいよ。 →編集設定をクラッシクにしたら80になってた。OK

HaskellのMonadをJavaScriptで実装するとしたら

論理面も怪しいし、利用してるAPIも適当なんでアレで動くものじゃないですが、大枠だけ書いてみるテスト。参考はParsecですが、状態管理はだいぶ省略してます(特にエラー情報)。 http://www.cs.uu.nl/people/daan/download/parsec/parsec.html http://www.…

ギルドウォーズ: C2エンディング

発売一ヶ月たってやっとC2のRPモードをクリアした。エンディングはフィールドになっていて、アイテムもらったり防具買ったりと自由に動けるんだけど、スタッフロールがあるのが今回の特徴。声優とかローカライズとか含めた数だったけどそして意外と多人数で…

Control.Concurrent.STM

STMってのはSoftware Transactional Memoryの頭文字。 [id:bellbind:20051215:1134609968] 基本はTVar aに対し、読み書きする機能。ほぼData.IORefと同じようにnew/read/writeして使う。 対象: IORef → TVar 処理: IO → STM ただし、機能はSTM(モナド)型であ…

Data.FunctorM

fmapM :: Monad m => (a -> m b) -> f a -> m (f b)listデータに対してMonad式の処理をする場合(コードリストを順にEvaluateするとか)は、これ使えばよいのだろう。

Stupid Haskell Code

プログラミングでは、KISS(Keep It Simple Stupid) Principleってよく言うけど、JavaとかではSimpleを追求すればほぼStupidになるんで、最後のStupidの意味がいまいちつかみにくいかもしれない。 しかし、Haskellのようにいろいろ高度にかけちゃう言語で物事…

uiかえすぎw

Type Theory and Functional Programming

http://www.cs.kent.ac.uk/people/staff/sjt/TTFP/ diggで上位に来てた。読むのも面倒なんで誰かこの内容について書いてないか期待。

はてなグループを作ってみる

いかんせんカテゴリ付けが苦手なんで、はてなグループにしてキーワードリンクさせてみようってことで。 http://bellbind.g.hatena.ne.jp/ こっちは逆に他人とのキーワードリンクからは見えなくなるみたいけど。

Haskell: Control.Monad.Stateメモ

機能一覧や例は以下にあるけど、これだけで理解するのは正直難しい。 http://www.haskell.org/ghc/docs/6.4.1/html/libraries/mtl/Control-Monad-State.html 理解しにくそうなところを意識して書いてみる。 なにをするものか: 関数の中で上から順番にデータ…

ここ最近の~/.emacs.el設定

いろいろな環境で使うことが多くなってから、ツール設定はカスタマイズはあまりしないでどんどんシンプルになってきてる。何十何百行になってた書いてたemacsでもその傾向は同じ。hookとか使ってられないし、これだけは譲れないもの(大半は日本語環境用)の列…