| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
seongtae_jeong
가입: 2024년 3월 4일 올린 글: 10
|
올려짐: 2024년3월18일 22:57 주제: ex2-4 질문 |
|
|
안녕하세요.
ex2-4의 문제에 나와 있는 대로 Queue를 정의하고 IntListQ를 구현했습니다.
그런데 문제에 나와 있는
| 코드: |
let myQ = IntListQ.emptyQ
let yourQ = IntListQ.enQ(myQ, [1])
|
이 코드를 실행하려고 하면 [1]이 IntListQ.element가 아니라 그냥 int list로 해석되어 다음과 같은 에러가 발생하게 됩니다.
Error: This expression has type 'a list but an expression was expected of type
IntListQ.element
검색을 해봤더니 테스트 코드를 아래와 같이 작성하면 해결할 수 있다는 말이 있었습니다.
| 코드: |
let myQ = IntListQ.emptyQ
let e : IntListQ.element = [1]
let yourQ = IntListQ.enQ(myQ, e)
|
그러나 이렇게 작성해도 변수 e를 만드는 부분에서 역시 동일한 에러가 발생합니다. 문제 해결을 도와주실 수 있을까요? |
|
| 위로 |
|
 |
이재호 Site Admin
가입: 2022년 3월 6일 올린 글: 209
|
올려짐: 2024년3월19일 11:44 주제: |
|
|
안녕하세요,
올바르게 구현하면 해당 에러는 발생하지 않고 타입 검사기를 통과해야합니다.
에러 메시지로 유추해보자면, 학생 분의 코드에서 IntListQ.element의 타입을 다시 확인해보시기 바랍니다. 문제에서 | 인용: | | 예를들어: module IntListQ (...)는 정수 리스트를 큐의 원소로 가지는 경우겠지요. |
다른 문제일수도 있지만, 다시 한 번 검토해보시면 문제 해결에 도움이 될 것 같습니다.
조교 드림
감사합니다. |
|
| 위로 |
|
 |
이영훈
가입: 2024년 3월 20일 올린 글: 1
|
올려짐: 2024년3월20일 2:30 주제: Re: ex2-4 질문 |
|
|
| seongtae_jeong 씀: | 안녕하세요.
ex2-4의 문제에 나와 있는 대로 Queue를 정의하고 IntListQ를 구현했습니다.
그런데 문제에 나와 있는
| 코드: |
let myQ = IntListQ.emptyQ
let yourQ = IntListQ.enQ(myQ, [1])
|
이 코드를 실행하려고 하면 [1]이 IntListQ.element가 아니라 그냥 int list로 해석되어 다음과 같은 에러가 발생하게 됩니다.
Error: This expression has type 'a list but an expression was expected of type
IntListQ.element
검색을 해봤더니 테스트 코드를 아래와 같이 작성하면 해결할 수 있다는 말이 있었습니다.
| 코드: |
let myQ = IntListQ.emptyQ
let e : IntListQ.element = [1]
let yourQ = IntListQ.enQ(myQ, e)
|
그러나 이렇게 작성해도 변수 e를 만드는 부분에서 역시 동일한 에러가 발생합니다. 문제 해결을 도와주실 수 있을까요? |
IntListQ 를 정의할 때 ': Queue'를 붙이면 이런 문제가 생기는 것 같습니다.
저도 같은 문제를 겪었는데, 이를 지우니까 정상적으로 표시되었습니다. |
|
| 위로 |
|
 |
이재호 Site Admin
가입: 2022년 3월 6일 올린 글: 209
|
올려짐: 2024년3월20일 8:42 주제: |
|
|
해당 에러 메시지가 이렇게 작성하여도 나올 수 있군요! 공유해주셔서 감사합니다.
일단은 숙제 코드에 나온 것과 같이 작성하면 문제가 발생하지는 않습니다.
궁금하신 분들을 위해 부연 설명을 드리자면요,
| 코드: |
module IntListQ : Queue = struct ... end
|
라는 것은
"`IntListQ`는 `Queue`이고, 어떻게 구현했는지 속 내용은 알 필요 없어. 대신 이러이러한 타입이랑 값들이 들어 있어"
이라는 말입니다.
`type element = int list`라는 것도 나중에 `IntListQ`가 바꿀 수 있는 구현 세부사항이며, 밖에서는 이에 의존하면 안 됩니다.
마치 함수 내용물이 겉으로 드러나지 않는 것과 같은 맥락입니다.
만약 밖에 `type element = int list`라는 세부사항을 직접 드러내기 위해서는
| 코드: |
module IntListQ : Queue with type element = int list = struct ... end
|
와 같이 작성할 수 있습니다.
UTop 등에서 전자와 후자와 같이 구현한 후 출력되는 signature를 비교해보면 어떻게 달라지는지 확인해보시면 도움이 될 것 같습니다.
물론, 본 숙제에서는 `: Queue`를 떼고 제출해주시면 됩니다. |
|
| 위로 |
|
 |
|