게시판 인덱스

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

숙제 2 변경사항 및 스펙 정리 (9/27 13:00 기준)

 
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2014)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
강동옥



가입: 2009년 9월 18일
올린 글: 602

올리기올려짐: 2014년9월18일 18:12    주제: 숙제 2 변경사항 및 스펙 정리 (9/27 13:00 기준) 인용과 함께 답변

숙제 2와 관련하여 확정된 스펙을 모아놓은 게시글입니다.
질문은 이 글의 댓글로 다시지 말고, 게시판에 별도의 글을 통해 해 주세요.
--

Exercise 1 "CheckMetroMap"

--

Exercise 2 "왼쪽편에 쏠려있는 힙"
1) 문제에서 주어진 뼈대코드 중 rank 함수를 아래와 같이 수정합니다.
코드:

let rank = function EMPTY -> -1
                  | NODE (r, _, _, _) -> r

--

Exercise 3 "짚-짚-나무"

- 아래 NOMOVE 예외를 선언해 주셔야 합니다.
코드:
 exception NOMOVE of string


-그리고, goLeft함수의 마지막 줄(네번째 줄)은 아래와 같이 수정해야 합니다. (raise의 인자를 괄호로 감싸야 합니다.)
코드:
 | LOC(t, HAND([],up,right)) -> raise (NOMOVE "left of first")


- goDown은 자식 노드의 맨 왼쪽 으로 갑니다. 갈 수 없을 경우 NOMOVE 예외로 처리해 주세요

--

Exercise 4 "Galculator"

- 계산 도중 묶여있지 않은 변수를 만날 경우 FreeVariable 예외를 냅니다.
아래 코드를 참고하시고 숙제 제출시 포함해 주세요.
코드:
exception FreeVariable


- 계산 식의 SIGMA, INTEGRAL 등의 의미는 우리가 수학적으로 알고 있는 그것과 동일합니다. 헷갈리기 쉬운 몇몇 경우에 대해서는 다음과 같이 정하겠습니다.

(1) SIGMA 계산시 시작 값이 끝 값보다 클 경우 0을 리턴합니다.

(2) INTEGRAL(a, b, f)에서 a>b인 경우, -INTEGRAL(b,a, f) 의 값을 계산하시면 됩니다.

(3) INTEGRAL 계산시 시작과 끝 값의 차가 0.1 미만인 경우 0을 리턴합니다.

(4) SIGMA, INTEGRAL 의 대상 인자인 튜플의 첫 두 인자는 모두 어떤 exp든 올 수 있습니다. 단, SIGMA의 경우 첫 두 인자를 계산한 결과가 실수(float)일 경우 이를 정수로 바꾸어 계산합니다. 실수 -> 정수 변환에는 OCaml 내장 함수인 int_of_float 을 사용하도록 하겠습니다.

- SIGMA(1.4, 1.3, f)와 같은 식의 경우 위의 (1)과 (4) 중에 어떤 것을 먼저 적용하는지에 따라 결과값이 0이 될 수도 있고 f(1)이 될 수도 있을 텐데, 이런 경우는 테스트하지 않겠습니다. 즉, 어떻게 구현해도 무방합니다.

- INTEGRAL 계산시 구분구적법 형태로 계산하게 되는데, 이 때 고려하는 직사각형의 높이는 왼쪽 함수값을 기준으로 합니다.
즉, f 함수의 적분 계산시 구분구적법에서 구간 [a, b]를 만나면 해당하는 직사각형의 높이는 f(a) 가 됩니다.

- OCaml floating-point arithmetic 의 불확실성에 의해 발생할 수 있는 계산 오차는 무시하셔도 됩니다.
(예를 들어, 1.1 -. 1.0 > 0.1 식이 true 가 리턴되는 현상)
계산 값이 실수일 경우 오차 범위를 주는 식으로 채점할 예정이며, 테스트 케이스 또한 논란의 여지가 없는 식을 사용할 예정입니다.

- 변수로 주어지는 X는 항상 변수를 감싸고 있는 가장 안쪽의 SIGMA 또는 INTEGRAL 에 묶이는 것으로 합니다.
가장 안쪽의 어떤 SIGMA, INTEGRAL 도 없다면 FreeVariable 예외를 내시면 됩니다.

- SIGMA 계산시 n = a to b 라 할 때 a > b 인 경우 0을 리턴하도록 합니다.

- floating-point, integer arithmetic 은 OCaml 의 그것을 그대로 사용하도록 합니다.
float 의 infinity/neg_infinity/nan 을 그대로 계산에 사용하며,
정수에서의 Division_by_zero 예외도 따로 처리 하지 않고 그대로 예외를 내시면 됩니다.
단, 정수의 사칙연산을 사용할지 실수의 사칙연산을 사용할지는 자유롭게 의미를 주시고 선택하시면 됩니다.
채점시 혼란의 여지가 있을 수 있는 테스트 케이스는 사용하지 않겠습니다.


- 정수 -> 실수 변환에는 OCaml 내장 함수인 float_of_int 를 사용하도록 하겠습니다.
--

Exercise 5 "Queue = 2 Stacks"

- 어떤 코드를 작성해야 하는지에 대해서: 숙제의 템플릿을 그대로 따라가는 IntListQ 모듈을 구현하는 것으로 하겠습니다.
숙제에는 module IntListQ 뒤에 Queue 타입인지를 확인하는 ": Queue" 가 없음에 유의해 주세요.

구현하신 IntListQ 가 Queue 타입인지를 확인하려면 아래 코드가 정상적으로 해석되는지 보면 됩니다.
제출하실때는 물론 아래 코드는 제거하셔야 하고요. (Queue signature는 코드에 포함)
코드:
module ValidIntListQ = (IntListQ: Queue)


위의 코드를 통해 조교팀에서도 IntListQ 가 충실하게 구현되었는지 확인할 예정입니다.
--

Exercise 6 "계산실행"

- 숙제 pdf 오타 수정
1) 아래 코드의 env 를 environment 로 수정.
코드:
val eval: env * expr -> value

2) 예제의 1, 2 등의 숫자를 모두 NUM 1, NUM 2 등으로 수정.

- <strike>뼈대 코드를 잠시 뒤에 올려 드리겠습니다. </strike>뼈대 코드를 제공하는 대신, 모듈 타입(시그니쳐)를 아래와 같이 변경하는 것으로 하겠습니다. 숙제 문서에 나온 대로, 이러한 시그니처를 갖는 모듈 Zexpr을 작성하시면 됩니다.

코드:

module type ZEXPR = sig
  exception Error of string
  type id = string
  type expr =
    | NUM of int
    | PLUS of expr * expr
    | MINUS of expr * expr
    | MULT of expr * expr
    | DIVIDE of expr * expr
    | MAX of expr list
    | VAR of id
    | LET of id * expr * expr

  type environment
  type value

  val emptyEnv : environment
  val eval : environment * expr -> value

  val int_of_value : value -> int
end


0) 문법을 ocaml에 맞게 조금 수정한 것입니다.
1) <strike>뼈대 코드</strike> 수정된 모듈 타입(시그니처)에는 구현해야 할 함수가 하나 더 추가되어 있습니다. (int_of_value)
2) 숙제 문서에 있는 "최종 값을 프린트하고..."는 위의 int_of_value 함수를 구현하는 것으로 대체합니다.

- Error 예외 문자열을 다음과 같이 구분합니다.
1) 현재 환경에서 정의되지 않은 이름이 사용될 때 : "FreeVariable"

- 합, 곱, 나누기 등의 모든 사칙연산은 정수 사칙 연산을 따르도록 합니다. 예를 들어, DIVIDE(3,2)의 결과값은 1.5가 아닌 1입니다. 정수에서의 Division_by_zero 예외도 따로 처리 하지 않고 그대로 예외를 내시면 됩니다.
--
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2014) 시간대: GMT + 9 시간(한국)
페이지 11

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


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