作者dryman (dryman)
看板PLT
標題Re: [問題] FLOLAC op semantics 作業
時間Sun Jul 4 13:17:42 2010
: 我也是覺得這樣比較像 natural semantics. 也許
: 改用 config -> config 的原因是以後比較容易和 small-step
: semantics 做比較?但無論如何這兩個 type 蠻像的。
: 我猜想你碰到的問題可能不是關於 semantics, 而是
: 不知在 ocaml 中如何做 pattern matching?
pattern matching 我會做
我想我問題描述的不夠精確...
節錄一部分不能用的程式碼
用statement->state的版本我已經可以讓它跑了,以下是config->config的版本
c 是config
config = Inter a_exper * state
|Final state
57 let rec ns c = match c with
58 Inter (Ass (x, e), s) -> Final (update x e s)
59 | Inter (Skip, s) -> Final s
60 | Inter (Seq (st1,st2), s) -> Final (
61 (fun x -> ns (Inter (st2,x)))
62 (ns (Inter (st1,s))))
58, 59 都ok(這是老師給的程式碼) config->config
61 要讓rec ns可以吃config我完全想不出有什麼可以實踐的方法
因為Final != state
ns 回傳的值不能直接做rec
所以最後我還是把程式碼改成
80 let rec ns stmt s = match stmt with
81 Ass (v,e) -> update v e s
82 |Skip -> s
83 |Seq (st1,st2) -> (fun x -> ns st2 x) (ns st1 s)
這樣就清楚多了
btw 想問一下,有時候在ocaml top levl 中想要reload xxx.ml 檔
只用#use "xxx.m.";;時
它只會從之前錯誤的部分之後繼續讀
而不會更改前面修改的部分
(比如說雖然原本的前半部的type setting parse沒問題
但後面有些東西ocaml說它錯
所以就前後都有經過一些修改
可是再讀取時顯示它並沒有把前面的部分也讀取進來)
目前我的解決方法是離開ocaml再#use "xxx.ml";;
這樣的話就不會出錯
不知道有沒有更快速的解決方式?
(ex unuse "xxx.ml"之類?)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.46.31