[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 be1197ed94
commit c029028b6e

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