게시판 인덱스

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

숙제 2 공개 및 보충스펙 공지입니다.(0918 추가)

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


가입: 2012년 9월 9일
올린 글: 280

올리기올려짐: 2017년9월11일 20:09    주제: 숙제 2 공개 및 보충스펙 공지입니다.(0918 추가) 인용과 함께 답변

안녕하세요,

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

내용 : http://ropas.snu.ac.kr/~kwang/4190.310/17/hw2.pdf
제출 : http://ropas.snu.ac.kr/~ta/4190.310/17/submit/index.pl
기한 : 9/28 밤 11시 59분

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


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


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

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

Exercise 1 "참거짓"

----

Exercise 2 "k-친수"

----
Exercise 3 "친수의 합"

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

----

Exercise 4 "CheckMetroMap"

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

----

Exercise 5 "짚-짚-나무"

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


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

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


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

(0918 추가)
goLeft와 goRight의 뜻에 대한 질문이 들어와서 보충합니다.

goLeft는 현재 위치의 sibling(같은 부모노드를 가지는 형제노드)중 가장 가까운 왼쪽 sibling으로 옮겨가는 함수입니다.

goRight도 마찬가지로 가장 가까운 오른쪽 형제노드로 옮겨가는 함수입니다.

goDown에 대한 위의 보충스펙과 함께 생각해보시면, goUp, goDown, goRight, goLeft 네 함수로, 트리의 모든 노드를 방문할 수 있다는 것을 알 수 있습니다.

----

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 2017) 시간대: GMT + 9 시간(한국)
페이지 11

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


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