게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

hw5-2 번 질문입니다.

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2009)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
신희식



가입: 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를 정의할때 에러가 안나기만 하면 되는 것인지

정의할 때만 에러가 안나면 됩니다.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2009) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay