게시판 인덱스

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

숙제 2 공지 및 스펙 보충

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



가입: 2012년 9월 10일
올린 글: 211

올리기올려짐: 2015년9월17일 17:10    주제: 숙제 2 공지 및 스펙 보충 인용과 함께 답변

안녕하세요,

숙제 2가 올라왔음을 알려드립니다.

내용 : http://ropas.snu.ac.kr/~kwang/4190.310/15/hw2.pdf
제출 : http://ropas.snu.ac.kr/~ta/4190.310/15/submit/index.pl
기한 : 9/30 밤 12시

제출 페이지에서 학번을 아이디로 하여 가입(register)하신 다음 해당 계정으로 로그인하여 숙제를 제출하시면 됩니다. 가입 기간은 9/29 까지입니다.


* 과제 관련 주의 사항
과제를 하고 제출하기에 앞서 꼭 https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=4922 글의 주의사항을 확인해 주세요.


* 뼈대코드
숙제 2는 뼈대코드가 없습니다

* 숙제 스펙 보충사항
(질문은 이 글에 답글로 달지 마시고, 별도의 글로 질문해 주시기 바랍니다)

Exercise 1 "k-친수"

----
Exercise 2 "친수의 합"

- 2친수를 정수로 변환해서 더한 다음, 다시 2친수로 변환하는 것은 문제의 의도에 부합하지 않습니다.
정수 더하기 연산자 + 를 사용하지 않고, 2친수 형태로 직접 더하기 연산을 하는 함수를 작성하시기 바랍니다.

----

Exercise 3 "CheckMetroMap"

- CONNECT of metro * metro는 두 metro가 모두 제대로 생겼을 경우에 제대로 생긴 것입니다.

----

Exercise 4 "짚-짚-나무"

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


-그리고, goLeft함수의 마지막 줄(네번째 줄)은 아래와 같이 수정해야 합니다.
(raise의 인자를 괄호로 감싸야 합니다.)

코드:
 | LOC(t, HAND([],up,right)) -> raise (NOMOVE "left of first")


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

----

Exercise 5 "Galculator"

- 계산 식의 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 을 사용하는 것으로 하겠습니다.

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

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

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

- 변수로 주어지는 X는 항상 변수를 감싸고 있는 가장 안쪽의 SIGMA 또는 INTEGRAL 에 묶이는 것으로 합니다.
가장 안쪽의 어떤 SIGMA, INTEGRAL 도 없다면 FreeVariable 예외 예외를 내시면 됩니다.
FreeVariable예외를 아래 코드처럼 정의하시고, 숙제 제출시 포함해 주세요.

코드:
exception FreeVariable


- 사칙 연산에는 OCaml의 실수(float) 연산을 사용하도록 합니다.
float 의 infinity/neg_infinity/nan 을 그대로 계산에 사용하며, 정수 -> 실수 변환에는 OCaml 내장 함수인 float_of_int 를 사용하도록 하겠습니다.
--

Exercise 6 "Queue = 2 Stacks"

- 어떤 코드를 작성해야 하는지에 대해서 : 숙제의 템플릿을 그대로 따라가는 IntListQ 모듈을 구현하는 것으로 하겠습니다.
숙제 문서에 정의된 module type Queue를 숙제 파일에 포함하시고, 제시된 IntListQ 모듈을 완성하세요.

- 구현하신 IntListQ가 Queue 모듈 타입을 만족하는지 확인해 보시려면, 끝에 아래와 같이 한 줄을 추가하고 제대로 컴파일되는지 확인해 보시면 됩니다.
물론 제출하실 때에는 이 라인은 지워주셔야 합니다.

코드:
module ValidIntListQ = (IntListQ : Queue)


--

Exercise 7 "계산실행"

- 숙제 문서에 나온 예제의 1, 2 등의 숫자를 모두 NUM 1, NUM 2 등으로 수정.

- 모듈 타입(시그니쳐) ZEXPR를 아래와 같이 변경하는 것으로 하겠습니다. 숙제 문서에 나온 대로, 이러한 모듈 타입을 갖는 모듈 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 print_value : value -> unit
end

module Zexpr : ZEXPR =
struct
 (* Implement this module *)
end



1) 문법을 ocaml에 맞게 조금 수정한 것입니다.
2) 수정된 모듈 타입(시그니처)에는 구현해야 할 함수에 print_value가 추가되어 있습니다.
숙제 문서에는 "성공적으로 끝나면 최종 값을 프린트하고 끝나게 됩니다."라고 되어있는데, 이 print_value 함수를 구현하는 것으로 하겠습니다.
print_value함수는 계산된 결과값을, 10진수 형태로 표준 출력해야 합니다. ("1", "-2", "100" 등)
뒤에 개행(newline)문자는 출력하셔도 되고, 안 붙이셔도 됩니다.

예를 들어 다음과 같이 쓰면 표준 출력으로 문자열 "1"이 출력되어야 합니다.

코드:

let _ = Zexpr.print_value (Zexpr.eval (Zexpr.emptyEnv, Zexpr.NUM 1))


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

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

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


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