최종욱
가입: 2009년 9월 15일 올린 글: 84
|
올려짐: 2009년11월18일 13:42 주제: 지난주 수업 때 Scheme Interpreter 필기 |
|
|
저번 수요일 수업시간(11/11) 때 판서로 손코딩[..] 하던 간단한 스킴 인터프리터 받아적은 코드입니다.
맨 앞이랑 중간의 주석은 제가 임의로 달았습니다.
| 코드: | (*
Principles of Programming, SNU 4190.210
Kwangkeun Yi
Simple Scheme Interpreter using OCaml
Subversion 0.1 - A Draft on Nov 11, 2009
*)
type exp =
Num of int
| Var of string
| Lam of string * exp
| App of exp * exp
| If of exp * exp * exp
| Cons of exp * exp
| Car of exp
| Cdr of exp
| Letrec of string * exp * exp
type value = Intv of int | Funv of string * exp | Pairv of value * value
type env = (string * value) list
(*
lookup : env->string->value
add : env->string->value->env
is not implemented yet
*)
let rec eval e env = match e with
Num i -> Intv i
| Var x -> lookup env x
| Lam (x, e) -> Funv (x, e)
| Letrec(x, e1, e2) -> eval e2 (add env x (eval e1 env))
| App (e1, e2) ->( let v = eval e1 env in match v with
Funv(x, e) -> let v' = eval e2 env in eval e' (add env x v')
| _ -> raise Error)
| If (e1, e2, e3) -> (match (eval e1 env) with
Intv 0 -> eval e3 env
| Intv _ -> eval e2 env
| _ -> raise Error)
| Cons(e1, e2) -> Pairv((eval e1 env), (eval e2 env))
|
혹시 오타나 제가 잘못 적은 것이 있으면 있으면 알려주세요~ _________________ Jongwook Choi
Seoul National University, School of Computer Science & Engineering |
|