[obsidian] vault backup: 2023-08-28 01:16:27
This commit is contained in:
		@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user