강동옥
가입: 2009년 9월 18일 올린 글: 602
|
올려짐: 2014년11월4일 18:32 주제: 숙제 6 변경사항 및 스펙 정리 (11/16 23:00 기준) |
|
|
Exercise 1. "SM5 Rozetta"
- rozetta.ml 을 제출합니다.
- 입력으로 들어오는 SM5 프로그램에서 사용하는 변수명은, 특수문자를 포함하지 않는 것으로 하겠습니다. 번역하는 과정에서 변수 이름이 겹치지 않는 것을 보장하기 위해 제공해드리는 스펙입니다.
참고글 : https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=3498
- loc 값과 record 값이 어떻게 생겼는지 알 수 없기 때문에, 입력으로 들어온 Sm5 프로그램은 loc이나 record 상수를 push하려 시도하지 않는다고 가정하겠습니다.
관련 참고글 : https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=2997
예를 들어,
코드: | Sm5.PUSH(Sm5.Val(Sm5.L location))
Sm5.PUSH(Sm5.Val(Sm5.R record))
|
이런 명령은 입력으로 들어오지 않습니다. 이러한 경우에 대해서는 자유롭게 예외 처리해 주시기 바랍니다. 채점시 이런 케이스는 테스트하지 않을 것입니다.
물론 이는 push v::C 의 경우에만 해당됩니다. "push x::C" 로 이미 환경에 저장되어있던 무언가를 꺼내오는 것에는 해당되지 않습니다.
--------------------------------------------------
Exercise 2. "Vanilla Lambda Encoding"
- encode.ml을 제출합니다.
- 숙제 문서의 type mexp 정의에 오타가 있습니다. 우선 mexp로 써야 하는 부분이 exp로 쓰여져 있으며, App constructor가 빠져 있습니다. 뼈대 코드에는 올바르게 정의되어 있으므로 그쪽을 참조해 주세요.
- and (x, y) : 0이 false, 나머지 true로 간주하고 계산하며 true이면 1 false이면 0을 냅니다. x가 먼저 0으로 계산되면 y는 계산하면 안됩니다.
- natural number : 0 이상의 정수로 정의하겠습니다.
- Num of int, Sub of exp * exp 를 계산한 결과가 음수가 나오는 테스트케이스는 사용하지 않도록 하겠습니다.
- 숙제 문서에도 설명되어 있듯이, 숙제 5-3에서 등장한 reduce 함수를 사용하여 여러분이 작성한 encode 함수가 올바른지 확인할 것입니다. 이 reduce 함수는 조교팀이 작성한 모범 답안을 사용하여 채점하겠습니다.
- 과제의 의도는, M_0 언어의 여러 요소를 람다 칼큘러스로 표현해 보는 것이며, 이 의도를 준수해 주시기 바랍니다. M_0 프로그램의 결과 정수값을 계산하고 이를 거꾸로 lexp로 번역하는 방식으로 encode 함수를 작성하시면 0점 처리될 수 있습니다.
--------------------------------------------------
Exercise 3. "M Interpreter"
- m_vanilla.ml 을 제출합니다.
- Equal의 semantic에 대한 상세한 정의는 M 언어 스펙 문서 http://ropas.snu.ac.kr/~kwang/4190.310/14/M.pdf 를 따라가는 것으로 하겠습니다.
(1) 두 값이 같은 타입일 경우 값이 같으면 true, 다르면 false, 타입이 다르면 TypeError 예외를 발생시키시면 됩니다. 예외의 인자로 사용될 문자열은 자유롭게 정하시면 됩니다.
(2) 단, 두 값이 모두 Pair/Closure 타입일 경우 어떻게 처리하셔도 무방합니다. (True, False, 예외 처리 중 자유롭게 선택). Pair나 Closure 간의 비교는 채점시 테스트케이스로 사용하지 않겠습니다. |
|