| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
김홍준
가입: 2007년 9월 16일 올린 글: 16
|
올려짐: 2007년9월23일 6:12 주제: signature와 structure에 대한 질문입니다. |
|
|
숙제 2의 4번 문제를 하는 중에 궁금한 점이 생겼습니다.
문제에 주어진대로 다음과 같이 구현을 한 후에
| 코드: |
structure IntListQ =
structure
type element = int list
type queue = ...
...
end
|
문제에 주어진 예제를 실행해 보면 잘 되는데요.
여기에다가 signature Queue를 지정해준다음
| 코드: |
structure IntListQ : Queue =
structure
type element = int list
type queue = ...
...
end
|
이렇게 signature를 지정해 준후에
다음 명령을 실행 시키면
| 코드: |
val myQ = IntListQ.emptyQ
val yourQ = IntListQ.enQ(myQ, [1])
|
다음과 같은 오류가 납니다.
| 인용: |
오류: IntListQ.element 타입이어야 하는데 _a list 타입입니다.
|
왜 이런 오류가 나는 것인지요?
structure의 타임을 명시적으로 지정해 줬을 뿐인데 실행시 오류가 나는 이유가 뭔지 모르겠습니다. |
|
| 위로 |
|
 |
오학주
가입: 2005년 9월 5일 올린 글: 118
|
올려짐: 2007년9월23일 11:08 주제: |
|
|
signature로 타입을 지정했을 때 아마 다음 줄에서 에러가 날 겁니다.
| 인용: |
val yourQ = IntListQ.enQ(myQ, [1])
|
signature로 감싸주면 IntListQ를 사용하는 입장에서 signature에 적혀있는 내용만 알 수 있습니다. element가 IntListQ내에서 int list로 구현되어 있는지 모르게 되지요.
즉, 프로그래머가 element 가 int list인 것을 가정하고 프로그램하는 것은 오류입니다.
이 정보를 사용자가 모르게 하도록 하는것이 signature를 사용하는 목적이겠죠?
Queue타입을 지정해줬을때 컴파일 안되는 문제를 해결하려면
1. signature에서 element type이 int list임을 알려주거나
2. int list를 element로 바꾸어주는 함수를 Queue 타입에 추가하거나
하셔야 합니다.
1의 경우에는 signature선언부분의
type element 를
type element = int list 라고 해주시면 되고요.
(그런데 이 방법은 컴파일만 되도록 하는 임시방편이지 Queue를 정수형타입만으로 제한하고 있기 때문에 본래의 목적에 어긋난다는것도 알아두세요 )
2의 경우에는 signature와 structure에
element_of_int : int -> element 와 같은 함수를 정의하시면 됩니다. |
|
| 위로 |
|
 |
허기홍 손님
|
올려짐: 2007년9월26일 16:12 주제: |
|
|
그러면
실행시킬때
val myQ = IntListQ.emptyQ
val yourQ = IntListQ.enQ(myQ, element_of_int([1]) )
라고 실행해야하는 겁니까?? |
|
| 위로 |
|
 |
김진산
가입: 2006년 9월 13일 올린 글: 45
|
올려짐: 2007년9월29일 6:22 주제: |
|
|
[질문1]
| 인용: |
2의 경우에는 signature와 structure에
element_of_int : int -> element 와 같은 함수를 정의하시면 됩니다.
|
element가 int list 형인데 elemnet_of_int : int -> element 가 아니라
element_of_int_list : int list -> element 아닌가요?
[질문2]
| 인용: |
val myQ = IntListQ.emptyQ
val yourQ = IntListQ.enQ(myQ, element_of_int([1]) )
라고 실행해야하는 겁니까??
|
허기홍님이 위와 같이 질문하셨는데,
| 인용: |
val myQ = IntListQ.emptyQ
val yourQ = IntListQ.enQ(myQ, IntListQ.element_of_int([1]) )
|
라고 생각하고 있는데 맞습니까?
[질문3]
sturcture로만은 잘 동작하다가, signature를 붙이고 문제가 생겼는데요~
저의 경우는 아래와 같은 현상이 있습니다.
| 인용: |
# val myQ = IntListQ.emptyQ;;
val myQ: IntListQ.queue = <abstr>
# val yourQ = IntListQ.enQ(yourQ, IntListQ.element_of_int_list([1]));;
val yourQ: IntListQ.queue = <abstr>
|
<abstr>이 무엇일까요. @_@?
---
답변 부탁드립니다. |
|
| 위로 |
|
 |
|