게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

지난주 수업 때 Scheme Interpreter 필기

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2009)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
최종욱



가입: 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
위로
사용자 정보 보기 비밀 메시지 보내기
윤용호



가입: 2008년 9월 23일
올린 글: 257

올리기올려짐: 2009년11월18일 14:31    주제: re 인용과 함께 답변

Car랑 Cdr 실행규칙까진 수업시간에 했던것같은데...

| Car e' ->
(match eval e' env with
Pairv(v1,_) -> v1
| _ -> raise Error)
| Cdr e' ->
(match eval e' env with
Pairv(_, v2) -> v2
| _ -> raise Error)

이정도?였나요
_________________
TA
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2009) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay