[obsidian] vault backup: 2023-08-28 01:16:27

This commit is contained in:
Tomoya Matsuura(MacBookPro) 2023-08-28 01:16:27 +09:00
parent 4a7ccbd982
commit a76170f53b

View File

@ -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