作者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