[obsidian] vault backup: 2023-08-28 01:16:27
This commit is contained in:
parent
be1197ed94
commit
c029028b6e
@ -101,10 +101,12 @@ let rec imachine : expr → env → value =
|
|||||||
fun ptr → imachine e (ptr :: env)
|
fun ptr → imachine e (ptr :: env)
|
||||||
| App (p,ef,ea) →
|
| App (p,ef,ea) →
|
||||||
let va = imachine ea env in
|
let va = imachine ea env in
|
||||||
shift_one heap ptr va; imachine ef env ptr
|
shift_one heap ptr va;
|
||||||
|
imachine ef env ptr
|
||||||
| Feed (ptr,e) →
|
| Feed (ptr,e) →
|
||||||
let v = imachine e (ptr::env) in
|
let v = imachine e (ptr::env) in
|
||||||
shift_one heap ptr v; v
|
shift_one heap ptr v;
|
||||||
|
v
|
||||||
|...
|
|...
|
||||||
|
|
||||||
let rec repeat : int → (unit → 'a) → 'a =
|
let rec repeat : int → (unit → 'a) → 'a =
|
||||||
@ -116,6 +118,17 @@ let rec repeat : int → (unit → 'a) → 'a =
|
|||||||
let eval e env n = repeat n (fun () → imachine e env)
|
let eval e env n = repeat n (fun () → imachine e env)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
これAppの引数は`p`じゃなくて`ptr`だよな
|
||||||
|
|
||||||
|
```ocaml:10-13
|
||||||
|
| App (p,ef,ea) →
|
||||||
|
let va = imachine ea env in
|
||||||
|
shift_one heap ptr va;
|
||||||
|
imachine ef env ptr
|
||||||
|
```
|
||||||
|
|
||||||
|
これ、Rustで改めて簡単に実装してみて思ったけど、heapの中のデータ構造がどうなってるか(初めにどうやってどのサイズのヒープを確保すべきか)が一番重要なのにそこに触れられていないのでは、、、
|
||||||
|
|
||||||
#### C:[[MetaOCaml]]での多段階インタプリタ
|
#### C:[[MetaOCaml]]での多段階インタプリタ
|
||||||
|
|
||||||
```ocaml
|
```ocaml
|
||||||
|
Loading…
Reference in New Issue
Block a user