최재승
가입: 2012년 9월 10일 올린 글: 211
|
올려짐: 2015년11월19일 15:43 주제: |
|
|
안녕하세요,
저도 이 문제 때문에 고민을 많이 하고 교수님 의견을 물어보았습니다. 최종적으로 다음과 같이 결정되었으며, 추가 스펙 공지글에도 업데이트 되었습니다.
(1) 우선, 실행 결과는 당연히 변환 전과 후가 같아야 합니다.
(2) 어떤 mexp에 나타난 sub-expression들은 모두 cps 변환되어야 합니다. 예를 들어 cps(e1+e2)의 경우, e1, e2는 각각 cps로 변환된 (cps e1), (cps e2) 형태로 나타나야 합니다.
(3-1) e가 상수(Num, Var, Fn, Rec) 일때만 cps(e) = \k.k(...) 형태를 허용합니다. 상수의 경우 계산할 게 없으므로 바로 k에 전달하는 것입니다.
(3-2) e가 상수가 아니면 항상 cps(e) = \k....(\v....k... ) 형태로 변형되어야 합니다. 복합식의 경우, 일부를 먼저 변환하고 남은 할 일을 k를 가지고 구성해서 전달하는 것입니다.
예시를 들어드린 Add의 경우를 보면, 복합식 e1 + e2 에서 일부인 e1을 변환한 다음, 앞으로 할 일을 인자로 전해주고 있습니다. 이 '앞으로 할 일'을 정의하는 데 k가 사용되고요.
인용: | cps(e1 + e2) = \k. (cps e1) (\v1. (cps e2) (\v2. k (v1 + v2) ) ) |
신동진 님이 질문한 예제의 경우, 이러한 조건을 만족하지 않으므로 걸러집니다.
조교 드림 |
|