トップ «前の日記(2014-05-23 (Fri)) 最新 次の日記(2014-06-07 (Sat))» 編集

uDiary

海野秀之(うんのひでゆき)の外部記憶

Twitter (twilog) / RSS / アンテナ / ぶくま

2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|

2014-05-29 (Thu)

[Haskell][Tiger] Modern Compiler Implementation in Haskell 5章

この間はじめた、Modern Compiler Implementation in Haskell という遊びは、 けっこう面白くて良いです。きちんと読みたかった Tiger Book も読めて、Haskell を書く量を確保する意味でもいい感じ。

いま、5 章の Type Checking のところをやっているんですが、 どうも再帰的な型定義のところがあやしい。

testcases にある test5.tig は以下のようなコードなのですが、

/* define valid recursive types */
let
/* define a list */
type intlist = {hd: int, tl: intlist}

/* define a tree */
type tree ={key: int, children: treelist}
type treelist = {hd: tree, tl: treelist}

var lis:intlist := intlist { hd=0, tl= nil }

in
	lis
end

これを、今日書きたての type checker にかけると、こんな感じ:

$ ./driver.exe < ../testcases/test5.tig
ExpTy {ty = RECORD [("hd",INT),("tl",NAME "intlist" (Just (RECORD [("hd",INT),("tl",NAME "intlist" Nothing)] 40016)))] 40016}

レコード型のフィールド部分に Nothing が残っちゃっています。

最初は tl=nil のところで型チェックでコケていました:

$ ./driver.exe < ../testcases/test5.tig
driver.exe: Pos {line = 10, column = 36}undefined type (1): intlist

そこで、苦し紛れに trdec (A.TypeDec tdecs) を 3 pass にしてみたけど、やっぱりダメよねと。

明日、ちゃんと考えよう。

以下のコードも参考にさせてもらおうかな: https://github.com/steshaw/tiger-ml

せっかく無理やり実装した unique を使ってないところも気になる。


2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|
Categories 3imp | Card | Cutter | Dalvik | Euler | Football | GAE/J | Hand | Haskell | Re:View | Ruby | Scheme | TQD | Tiger | TigerBook読 | UikiTeXi | Verilog | Violin | Web | parconc | tDiary | お勉強 | エントロピー | ツン読 | | 将棋 | 政治について | | 模写してみよう | 確率論 | 設定など | 雑文 | 音声