이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
홍석진
가입: 2014년 9월 16일 올린 글: 3
|
올려짐: 2014년9월29일 20:32 주제: 숙제 2-5 타입 관련 질문 |
|
|
숙제 2-5에서 IntListQ 뒤에 ": Queue"를 붙이거나
코드: | module ValidIntListQ = (IntListQ: Queue) | 를 사용하여 실행하면 타입 에러가 납니다.
예를 들어
코드: | IntListQ.enQ(IntListQ.emptyQ,[1;2;3;4]);; |
를 실행시킬때,
": Queue"를 붙이지 않은 경우에는
- : int list list * 'a list = ([[1; 2; 3; 4]], []) 와 같이 결과가 나오지만
": Queue"를 붙인 경우에는 int list와 element 타입이 다르다고 판단하여 에러가 납니다.
This expression has type IntListQ.queue * int list but is here used with type
IntListQ.queue * IntListQ.element
queue 타입의 경우도 만찬가지로 에러가 발생하였습니다.
모듈 타입 Queue의 type element, type queue 부분을 type element = int list, type queue = .... 와 같이 명시해주었더니 위의 문제가 해결되었습니다.
위와 같이 숙제에서 주어진 타입 시그니쳐 부분을 변경해도 되는건가요?
그게 아니라면 구현상의 문제가 있는건가요? |
|
위로 |
|
 |
강동옥
가입: 2009년 9월 18일 올린 글: 602
|
올려짐: 2014년9월29일 23:39 주제: type 관련 |
|
|
우선, 숙제가 만족해야 하는 사항을 정리해드리면,
작성하신 숙제 뒤에
코드: | module ValidIntListQ = (IntListQ: Queue) |
만 붙이셨을 때는 타입 에러 없이 시행이 되어야 합니다.
IntListQ 뒤에 ": Queue"를 붙이고
코드: | IntListQ.enQ(IntListQ.emptyQ,[1;2;3;4]);; |
를 실행했을 때 타입 에러가 나오는 것은 정상입니다. 왜냐하면, Queue signature가 드러내 주는 interface에, element가 int list라는 정보가 들어있지 않기 때문입니다. 따라서 모듈 타입 Queue의 코드를 고쳐서 시그니쳐에 해당 정보를 명시해 주셨을 때 문제가 해결된 것입니다. signature를 붙이지 않을 경우에는 자동으로 struct와 end 사이에 있는 모든 정보가 외부에 interface로 드러나기 때문에 역시 에러가 나지 않은 것입니다.
만약
코드: | module ValidIntListQ = (IntListQ: Queue) |
이 코드만 추가했을 때에 문제 없이 실행 된다면 타입을 잘 맞춰서 구현한 것이며, 제출하실 때는 이 코드를 제거해 주시고 IntListQ 뒤에 ": Queue"도 붙이지 말아 주시기 바랍니다. 또 Queue 시그니쳐도 그대로 두셔야 합니다. |
|
위로 |
|
 |
홍석진
가입: 2014년 9월 16일 올린 글: 3
|
올려짐: 2014년9월30일 1:06 주제: |
|
|
감사합니다.
제가 ValidIntListQ를 가지고 테스트를 해보라는 거라고 잘못 생각했었던거네요. |
|
위로 |
|
 |
|