Cleaner Scala Stack (会社ブログ用)
- 11. 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
- 12. Factorial / fact? { dup 1 eq ? { dup 1 sub ?/ fact dynamic ? exec mul } { pop 1 } ifelse } ? def ? 10 / fact dynamic exec
- 14. 立ちはだかった case クラスって… Parsec のインターフェイスが独特 共変、反変がよく分からない emacs の flymake があんまり教えてくれない コンパイルが遅い トップレベルでの repl で前方参照してくれない (? 相互再帰ェ )
Editor's Notes
- というよくある理由
- 因みに再帰で実装しました。
- eval は環境を受け取って返す
- 1. エグゼキュートスタックから Intr を Pop する 2.StackVal だったらオペランドスタックにプッシュ 3.def 命令だったら辞書スタックに積む 4.exec などの命令だったら