狠狠撸

狠狠撸Share a Scribd company logo
Cleaner が Scala で Stack 言語 を 書いてみて
自己紹介 id:oskimura アルゴリズム勉強会 主催 スタート Clean 主催
Clean ってなに スタート Clean 参考ページ http://qiita.com/questions/72 第二回 スライド
動機 Scala を勉強したかった ? Stack 言語でも書こう
Stack 言語について PostScript を参考 3つのスタック オペランドスタック ディクショナリスタック エグゼキュートスタック Factorial を動かす事を目標
? みなさん 脳内 JVM が あるので スタックマシンの 説明は なし
設計方針 Clean っぽく書きたい 代数的データ構造で命令を書きたい パーサは Parsec 使いたい ? 命令の実行は状態遷移マシンっぽくかきたい
設計 1 ?
設計 2 ?
設計 3(REPL) ?
Instr( 命令 ) abstract ?class Instr? //  オペランドスタック case object Pop ? ? ? ? ? ? ? extends Instr case class Push(v:StackVal) ? extends Instr //  実行スタック case object If ? ? ? ? ? ? ? ?extends Instr //  辞書スタック case object Def ? ? ? ? ? ? ? extends Instr
Factorial / fact? { dup 1 eq ? { dup 1 sub ?/ fact  dynamic ? exec  mul } { pop 1 } ifelse } ? def ? 10 / fact  dynamic  exec
? デモ
立ちはだかった case クラスって… Parsec のインターフェイスが独特 共変、反変がよく分からない emacs の flymake があんまり教えてくれない コンパイルが遅い トップレベルでの repl で前方参照してくれない (? 相互再帰ェ )
解決法 ( ライフハック ) Scala を dis っぽくにいえば 水嶋さんが 教えてくれる
? https://gist.github.com/1103812

More Related Content

Cleaner Scala Stack (会社ブログ用)

Editor's Notes

  1. というよくある理由
  2. 因みに再帰で実装しました。
  3. eval は環境を受け取って返す
  4. 1. エグゼキュートスタックから Intr を Pop する 2.StackVal だったらオペランドスタックにプッシュ 3.def 命令だったら辞書スタックに積む 4.exec などの命令だったら