| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
신희식
가입: 2009년 9월 17일 올린 글: 13
|
올려짐: 2009년11월14일 22:17 주제: hw5-2 번 질문입니다. |
|
|
1. type을 constructor없이 정의 해서 사용해되 되는 건가요..?
2. module IntListQ : Queue = 를 해야하나요
아니면 그대로 module IntListQ 면 되나요?
( 전자로 하니 abstraction이 되고 문제의 예시, let yourQ = IntListQ.enQ(myQ, [1]) 에서 [1]을 element로 받아들이지 않게 되네요.
(이건 element의 constructor가 없어서 그런것 처럼 보이는데 왜 그럴까요..)
후자는 abstraction 이 아닌 노출이 그대로 일어나는군요.) |
|
| 위로 |
|
 |
윤용호
가입: 2008년 9월 23일 올린 글: 257
|
올려짐: 2009년11월15일 0:09 주제: re |
|
|
1. type을 constructor 없이 사용할 수 있습니다.
예를 들어 우리 숙제에도 type state = int 라든지... 예가 있지요.
단, constructor가 없으면 union으로 사용할 수가 없게 됩니다.
예를 들어 type state = int | string 이런 표현은 곤란합니다.
즉, constructor 없는 type은 단순히 aliasing 기능만을 갖습니다.
2. 채점에 관해선 제가 뭐라 드릴 말씀이 없고
사실 sig가 좀 잘못주어졌다는 생각이 드네요.
보통 임의의 타입의 값을 저장하는 자료구조를 sig로 정의한다면
sig
type 'a queue
...
end
이런 sig가 주어져야 합니다만.. element라는 타입이 따로 나와있는 바람에 어렵게 되었군요. _________________ TA |
|
| 위로 |
|
 |
장수원
가입: 2008년 9월 26일 올린 글: 167
|
올려짐: 2009년11월15일 0:16 주제: Re: hw5-2 번 질문입니다. |
|
|
| 신희식 씀: |
1. type을 constructor없이 정의 해서 사용해되 되는 건가요..?
|
특별히 value constructor를 이용해서 정의할 필요는 없습니다. 다만 정의할 때 type constructor는 사용해야 겠죠. value constructor는 type sometype = A | B of int 에서 A, B 같은 것들이고, type constructor 는 type a type 'a b = 'a list type c = a b 에서 a b c 같은 것들입니다.
| 신희식 씀: |
2. module IntListQ : Queue = 를 해야하나요
아니면 그대로 module IntListQ 면 되나요?
( 전자로 하니 abstraction이 되고 문제의 예시, let yourQ = IntListQ.enQ(myQ, [1]) 에서 [1]을 element로 받아들이지 않게 되네요.
(이건 element의 constructor가 없어서 그런것 처럼 보이는데 왜 그럴까요..)
후자는 abstraction 이 아닌 노출이 그대로 일어나는군요.) |
그대로 module IntListQ 로 해 주세요. module IntListQ : Queue = ... 로 하면, IntListQ 모듈은 사용할 수 없습니다. 그 이유는 다음을 참고하세요.
https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=1950
이번 숙제에서는 스펙에 나와 있는대로 module IntListQ = ... 으로 정의하시되, module Tmp = (IntListQ : Queue) 를 했을 때 에러가 안 나게 해 주세요.
보통 이런 경우 module IntListQ : Queue with type element = int list = ... 로 정의 해서, abstraction을 지키면서 사용합니다. Queue 시그니쳐에서 element만 구체적인 타입을 지정하는 거죠. |
|
| 위로 |
|
 |
강동옥
가입: 2009년 9월 18일 올린 글: 602
|
올려짐: 2009년11월16일 13:35 주제: 어떻게 하라는 건지 잘 모르겠는데요.. |
|
|
sig를 구체적으로 고치라는 건가요?
아니면 단순히 Tmp를 사용하는것과는 별개로 Tmp를 정의하는 것이 에러가 안나면 되는건가요? |
|
| 위로 |
|
 |
윤용호
가입: 2008년 9월 23일 올린 글: 257
|
올려짐: 2009년11월16일 14:29 주제: re |
|
|
1. sig는 원래대로 유지합니다.
2. IntListQ:Queue 로 선언한다 하더라도 문제가 생기지 않도록 IntListQ를 작성합니다.
3. IntListQ는 실제로 제출할 때는 :Queue 없이 제출합니다. _________________ TA |
|
| 위로 |
|
 |
신기정
가입: 2009년 9월 15일 올린 글: 83
|
올려짐: 2009년11월17일 14:46 주제: 질문입니다. |
|
|
IntListQ:Queue 로 선언한다 하더라도 문제가 생기지 않도록
IntListQ를 작성합니다.
-> 이 방법이 위에 조교님이 말씀하신데로
module IntListQ:Queue with type element = int list= 라면
IntListQ는 실제로 제출할 때는 :Queue 없이 제출합니다.
-> module IntListQ with type element = int list=
이렇게 제출하라는 말인가요?
이러면 syntax error가 발생합니다만. |
|
| 위로 |
|
 |
장수원
가입: 2008년 9월 26일 올린 글: 167
|
올려짐: 2009년11월17일 15:47 주제: Re: 질문입니다. |
|
|
| 신기정 씀: | IntListQ:Queue 로 선언한다 하더라도 문제가 생기지 않도록
IntListQ를 작성합니다.
-> 이 방법이 위에 조교님이 말씀하신데로
module IntListQ:Queue with type element = int list= 라면
IntListQ는 실제로 제출할 때는 :Queue 없이 제출합니다.
-> module IntListQ with type element = int list=
이렇게 제출하라는 말인가요?
이러면 syntax error가 발생합니다만. |
처음에 말씀드린데로 제출하실 소스 코드의 정확한 형태는 "module IntListQ = ..." 입니다. |
|
| 위로 |
|
 |
강동옥
가입: 2009년 9월 18일 올린 글: 602
|
올려짐: 2009년11월17일 17:23 주제: 그러니까 정확하게 궁금한 것은 |
|
|
# module Tmp = (IntListQ : Queue);;
module Tmp : Queue
# open Tmp;;
# enQ (emptyQ, [1]);;
This expression has type Tmp.queue * int list but is here used with type
Tmp.queue * Tmp.element
이런 에러가 나면 안되게 구현하라는건지 궁금합니다.
아니면 Tmp를 정의할때 에러가 안나기만 하면 되는 것인지 |
|
| 위로 |
|
 |
장수원
가입: 2008년 9월 26일 올린 글: 167
|
올려짐: 2009년11월17일 21:13 주제: Re: 그러니까 정확하게 궁금한 것은 |
|
|
| 강동옥 씀: | # module Tmp = (IntListQ : Queue);;
module Tmp : Queue
# open Tmp;;
# enQ (emptyQ, [1]);;
This expression has type Tmp.queue * int list but is here used with type
Tmp.queue * Tmp.element
이런 에러가 나면 안되게 구현하라는건지 궁금합니다.
아니면 Tmp를 정의할때 에러가 안나기만 하면 되는 것인지 |
정의할 때만 에러가 안나면 됩니다. |
|
| 위로 |
|
 |
|