게시판 인덱스

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

숙제 2번 질문입니다 - 예외처리 및 작년 게시판에서 논의된 사항

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



가입: 2009년 9월 10일
올린 글: 30

올리기올려짐: 2009년9월22일 15:10    주제: 숙제 2번 질문입니다 - 예외처리 및 작년 게시판에서 논의된 사항 인용과 함께 답변

Exercise 1. 2.
08년도 게시물을 보니 문제에 대해서 추가적인 가정을 하고 있습니다.
(1) 중복된 팀을 허용(ex. NODE (LEAF Korea, LEAF Korea))
(2) tourna가 완전한 이진 나무구조가 아닐 수도 있음
(3) drop 함수에 의해 모든 팀이 탈락할 경우 "" 리턴.
(4) toParen의 인자로 (LEAF Korea)가 들어올 경우 "Korea" 리턴

위의 가정을 올해 문제에도 동일하게 적용하여 구현해도 되나요?

Exercise 4.
goDown은 자식 중에서 가장 왼쪽 자식으로 가는 것이라고 생각하면 되나요?

Exercise 5.
(1) ocaml에서는 real type이 없는 것 같은데요. float을 사용하면 되나요?
(2) SIGMA(INT 1, INT 0, ...) 과 같은 경우는 exception을 던지면 되나요?
(3) INTEGRAL(FLOAT 10.0, FLOAT 1.0, ...) 과 같은 경우는 0.1씩 감소시키면서 계산을 하면 되나요?
(4) 작년 게시판을 보면 SIGMA의 첫번째, 두번째 인자는 INT로 캐스팅하라고 되어 있는데요. 버림(int_of_float은 소수점 아래를 버림)으로 생각하면 되나요?

Exercise 6.
문제에 적힌대로 하면 syntax 에러가 발생하는 데요. 작년 nML 문법에 맞춰진 것 같습니다.

그리고 예제에서

let myQ = IntListQ.emptyQ
let yourQ = IntListQ.enQ(myQ, [1])

이라고 하면 컴파일 에러가 발생합니다.

인용:
This expression has type IntListQ.queue * int list but is here used with type IntListQ.queue * IntListQ.element


type element = int list 임에도 이런 문제가 발생하는데요. 어떻게 해야 할까요?
위로
사용자 정보 보기 비밀 메시지 보내기
허기홍



가입: 2007년 9월 27일
올린 글: 231

올리기올려짐: 2009년9월22일 19:53    주제: 인용과 함께 답변

1,2.
오. 좋습니다. (4)번은 밑에서 제가 말씀드렸고. (1),(2),(3)번도 꼭 필요한 가정인 듯 싶습니다.

위 가정을 모두 적용하세요. 채점에 영향을 미칠것입니다.

5.
(1) 맞습니다. real 대신 float를 쓰세요.

(2) 익셉션으로 하죠. 대신 이렇게 합시다.
코드:
exception InvalidSigma


(3) 수학에서 인테그랄(2, 1) = - 인테그랄(1,2) 로 정의하죠? 이렇게 하겠습니다.

(4) 질문을 잘 이해못하겠습니다. 좀 자세히 설명해주시겠습니까? 일단 제가 작년 게시판을 읽어보고 이해하면 답을 먼저 올리죠.


6. nml에서 fn 은 ocaml에서 fun으로 고치시면 됩니다. module type은 똑같고, module 선언만 고치시면 됩니다. 모듈 타입과 시그치처가 아니라 그냥 모듈과 스트럭쳐입니다.
코드:
module IntListQ =
      struct
          type element = int list
          type queue = ...
          exception EMPTY_Q
          let emptyQ = ...
          let enQ = fun ...
          let deQ = fun ...
      end


타입 에러 관련 질문은 아마도 이런 이유일 것입니다.

코드:

module IntListQ : Queue =
  struct
    ...
  end

라고 하셨죠?

이렇게 하시면 내부적으로 정수 리스트를 사용해서 구현을 할지라도 바깥에서 보이는 껍데기는 Queue가 됩니다. Queue 모듈타입을 살펴보면 type element의 속내가 정의되어 있지 않죠. 그래서 말씀하신 에러가 발행하는 것입니다.

숙제를 제대로 하기 위해서는 두 가지 해결 방안이 있습니다.

하나는 모듈과 모듈타입을 연결 짓지 않는 방법입니다.
사실 모듈 타입 선언하지 않고 그냥 모듈만 선언하셔도 구현에는 아무 문제 없습니다. encapsulation의 우아함을 느끼지는 못하겠지만요.

둘째는 타입체커가 모르는 부분을 사람이 콕 짚어 주는 것입니다. 말씀 하셨듯이 타입 체커는 element가 int list 임을 모르죠?(구현을 숨겼기 때문에)
따라서 이를 적어줍니다.
코드:

module IntListQ : Queue with type element = int list =
    struct
        ....
    end


라고 하시면 타입체커가 잘 알아먹습니다.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
허기홍



가입: 2007년 9월 27일
올린 글: 231

올리기올려짐: 2009년9월23일 9:26    주제: 인용과 함께 답변

4. goDown은 가장 왼쪽 자식으로 갑니다.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2009) 시간대: GMT + 9 시간(한국)
페이지 11

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


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