 |
|
이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
양주현
가입: 2022년 3월 18일 올린 글: 5
|
올려짐: 2022년3월23일 12:57 주제: HW2 Exercise 6에서 모듈 관련 질문 |
|
|
공지사항에서
코드: | module ValidIntListQ = (IntListQ : Queue) |
를 한번 선언해 봐서 에러가 나는지 안나는지로 IntListQ가 Queue 타입의 모듈이 맞는지 확인하라고 말씀해 주셨습니다.
여기서 궁금한 점은
코드: | module type Queue =
sig
type element
type queue
....
val enQ : queue * element -> queue
....
end |
코드: | module IntListQ =
struct
type element = int list
type queue = (* 구체적인 구현 *)
...
let enQ : queue*element -> queue= (* 구체적인 구현 *)
end |
이 상태에서는 IntListQ가 Queue 타입이라고 명시적으로 되어 있지 않고, Queue 모듈의 구현 부분은 지워도 사실상 아무 상관이 없습니다.
코드: | module IntListQ : Queue =
struct
type element = int list
type queue = (* 구체적인 구현 *)
...
let enQ : queue*element -> queue= (* 구체적인 구현 *)
end |
위의 코드처럼 IntListQ의 타입을 : Queue 로 직접 지정해 보면
코드: | let myQ = IntListQ.emptyQ
let yourQ = IntListQ.enQ(myQ, [1]) |
여기서 [1]이 IntListQ.element가 아니라서 오류가 납니다.
코드: | let myQ = IntListQ.emptyQ
let yourQ = IntListQ.enQ(myQ, IntListQ.element [1]) |
이렇게 하면 될 줄 알았는데 안 됩니다. 찾아 보니 element는 abstract type이라서 저런 식으로는 못 쓴다고 나와 있습니다.
이런 식으로 모듈을 특정 타입을 만족하도록 명시적으로 정의해서 사용할 수는 없는 건가요?
StringListQ, CharListQ 등 Queue 타입의 모듈을 여러 개 더 만들 때, 일일히
코드: | module ValidSomeListQ = (SomeListQ : Queue) |
로 확인해 주는 것이 상당히 어색하고 부자연스럽게 느껴지는데, 모듈을 struct~end로 짤 때부터 Queue 타입이 되도록 짜는 방법은 없나요?
감사합니다. |
|
위로 |
|
 |
김훈
가입: 2021년 4월 17일 올린 글: 9
|
올려짐: 2022년3월23일 17:28 주제: |
|
|
안녕하세요,
말씀해주신 것처럼 element가 abstract type이라 IntListQ: Queue로 작성하는 방법은 힘들 것 같습니다.
과제의 메뉴얼을 그대로 따라가시는 걸 권장드려야 할 것 같네요.
감사합니다,
김훈 올림. |
|
위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|