# 2018 年 5 月 ## 2018-05-10 ### Quote [オスプレイの設計は見事、そして鳥人間の罠](http://business.nikkeibp.co.jp/atcl/opinion/16/021900056/050200007/?P=3) より $$
{ 私は、今の三菱のエンジニアに「なにがなんでも作りたい」という意欲があるのか、と疑問を覚えるんですよ。 それは、精神論のようにも聞こえますが。 いいえ。仕事を離れても、自分が損をしようが得をしようが、自分で作りたいという喉の渇きにも似た意欲が、航空機の設計には不可欠なんです。 $$} ## 2018-05-09 ### [Bunny] 抽象データ型への対応(いっこめ) 昨日時点で出ていた、mkHoge が出力されない問題に対応。 ## 2018-05-08 ### [Bunny] 抽象データ型への対応 去年からずっと時間がとれていなかった、このプロジェクトですが、少しずつでも進めていくようにしたい。 そういうわけで、1月くらいでとまっていたノートを読み返したりして思い出しながら続きに取り掛かり。 いやぁノートって偉大だ。ぜんぜん覚えていないようで、まぁ、端から端まで自分で書いたコードとノートが手元にあるのだから、なんとかなるものです。 次のようなサンプル (adt-sample.hs) を、どうにかコンパイルできる(?)ようになった。 $${ -- ADT: Algebraic Data Type data Direction = Right | Left | Up | Down -- deriving Show to_s Up = "Up" to_s Left = "Left" to_s Right = "Right" to_s Down = "Down" main = putStrLn $ to_s Right $$} ただし、このままだと、ランタイムエラーになる。ユーザ定義のデータ構築子を生成するコードがないという。 そういえば、True や False については、Prim.java のなかに用意してあった。 仮対処で、Main.java に、以下のコード片を手で加えてやると、期待通りに動くようになった。 $${ private static Expr mkExpr(HeapObj obj){ return new AtomExpr(new Var(obj)); } public static Expr mkRight(){ return mkExpr(new ConObj(new Cotr("Main.Right"), new AtomExpr[0])); } $$} というわけなので、続きとしては、今回手で加えたようなコード片を、コンパイラが吐くようにしてやればいいわけです。 その他、ちょっとした覚書き: - コードは全般的に未だひどいのですが、今回 TrCore を更新した部分が特にひどかった印象。もともと状態モナドを使わず書いていたのを、一部だけモナド化してあって、今回 ConstructorInfo を渡したかった部分は非モナド化部分だったので、とてもゴタゴタした。あとで直す。 - 上で指摘した、mkRight などの生成を考えると、preDefined な ConstructorInfo と、そうでないものは分けたくなるよなぁ - adt-sample2 で context reduction エラーになるのは、なんか Num 周りのようだったので、一部をコメントアウトした adt-sample2b をつくってためす。 など。