게시판 인덱스

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

3-1, 3-3에 관해서 질문입니다

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



가입: 2007년 4월 13일
올린 글: 9

올리기올려짐: 2007년5월7일 0:31    주제: 3-1, 3-3에 관해서 질문입니다 인용과 함께 답변

3-1 관련 질문
1) glue-t-from-a 와 glue-a-from-t는 왜 필요한지 모르겠습니다. 아래의 질문/답변을 읽어본 바로는 glue-[]-from-[]에 입력되는 인자와 동일한 type의 결과를 생성해서 반환 하는 것으로 이해가 되는데, 그렇다면 굳이 앞의 두 함수를 만들 필요가 있을까 의문이 듭니다. 제가 무엇을 잘못 이해해서 이런 의문이 드는 것인지... 구현을 하는 중이기에 더욱 불안합니다.

3-3 관련 질문
1) 과제에 포함된 예제에서는 Key로 (cons 1 3)과 같은 형태가 주어지는데, 다른 질문/답변을 확인해 보니 "key"와 같은 문자열로도 주어지는 것 같은데, 과연 그런지 궁금합니다.(만약 그렇다면 Key의 type이 다양하게 주어지더라도 dictLookup, dictRemove를 할 수 있어야 할 것 같아서 질문을 드립니다)

2) 이건 조교님이 다른 질문에 대한 답변란에 쓰신 것을 보고 드리는 질문인데요..(=> https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=828&sid=28353bb7e3b03e94b609c48795d1a464)

dictMap, dictFilter을 수행할 때에 인자로 받는 함수(V->W 혹은 V->bool)은 type에 관련해서 주어진 Dict_K,V와 문제를 일으키지 않는다고 가정하셔도 좋습니다.

라고 하신 말씀이 정확하게 무슨 뜻인지 모르겠습니다. 예컨데, 어떠한 함수가 있는데 그 함수는 Dict의 value에 대해서 type-free한 연산(마치 hash function처럼)을 할 수 있다는 뜻인가요?
위로
사용자 정보 보기 비밀 메시지 보내기
공순호



가입: 2005년 9월 29일
올린 글: 363
위치: 302동 312-2호

올리기올려짐: 2007년5월7일 11:39    주제: 인용과 함께 답변

답변드립니다.

3-1.

glue-X-from-Y 는 Y 형식으로 구현된 무늬들을 받아서 glue 하는데

그 결과를 X 형식으로 구현된 무늬로 돌려주는 함수입니다.


"입력되는 인자와 동일한 type의 결과를 생성해서 반환"하는 것은

glue-t-from-a, glue-a-from-t 와 같은 "배열 구현 방식"과 "트리 구현 방식"의 함수들에 해당하는 것이 아닌,

최상위 layer의 함수들(glue, rotate, ...)등에 해당하는 것 입니다.


3-3

1) 사전 자료 구조를 만드실 때에 Key가 될 수 있는 것은

함수를 제외한 나머지 모든 것들이라고 생각하셔도 무방합니다.

(cons 1 2), "key", 34 모두 key로 이용하실 수 있습니다.


2)

숙제에서 요구하는 사전 구조는

임의의 Key와 그에 해당하는 Value에 대한 Table과 같은 것 입니다.

예를 들어서 X라는 사전 구조를 제가 잘 정의해서 다음과 같은 결과를 얻을 수 있습니다.
코드:

(dictLookup X "key") => 3
(dictLookup X (cons 1 2)) => "ropas"
(dictLookup X 'snu) => 'cse



이런 경우에 사전 구조 X의 key 집합은 {"key", (cons 1 2), 'snu}가 되고

value 집합은 {3, "ropas", 'cse} 가 되게 됩니다.


scheme은 기본적으로 type checking을 하지 않기 때문에 위와 같이

서로 다른 type의 자료들을 한 곳에 모아서 처리하는 것이 어렵지 않습니다.

따라서 숙제에서 구현을 요구하는 emptyDict, dictLookup, dictInsert, dictRemove에 대해서는

위와 같이 작동하는 사전 구조를 만드는 것이 어렵지 않습니다.


하지만, 마지막 두 함수 dictMap과 dictFilter는 인자로 함수를 받습니다.

dictMap : (V -> W)

dictFilter : (V -> Bool)


dictMap의 경우를 살펴보면,

robust한 함수 dictMap을 작성한다는 것은

임의의 사전 D에 대해서 첫번째 인자로 임의의 함수 f (A -> B)가 들어와도

(잘 작동하거나/우아하게 종료되는) 함수를 작성한다는 것을 의미합니다.


그러기 위해서는 사전 D의 value들의 집합 V에 대해서

함수 f가 잘 정의된 함수인지를 점검해 보아야 합니다.


예를 들어서 V = {1, "abc", 't} 이고 f : x :-> x + 1 인 함수라면

f는 V의 원소 중의 하나인 "abc"에 대해서 잘 정의되어 있지 않은 함수이고

이러한 경우에는 에러처리를 해주셔야 할 것입니다.


위의 예제에서는 f의 정의역과 치역이 어떤 집합인지에 대한 정보를 알고 있지만

dictMap의 입장에서는 그저 임의의 함수 f가 들어오는 것일 뿐

그 함수의 정의역과 치역에 대해서는 알고 있지 못합니다.


이러한 종류의 문제가 발생하기 때문에, 이 것을 해결하는 것이 쉽지가 않습니다.

mapFilter의 경우에도 마찬가지 문제가 생길 수 있습니다.


따라서

dictMap과 dictFilter 함수를 구현하실 때에는 아래와 같은 가정을 해도 좋다는 것입니다.

dictMap, dictFilter을 수행할 때에 인자로 받는 함수(V->W 혹은 V->bool)은 type에 관련해서 주어진 Dict_K,V와 문제를 일으키지 않는다고 가정하셔도 좋습니다.

예를 들어서 dictMap의 f를 x :-> x+1 로 주었을 때에

dictMap에서 f와 함께 받는 사전 구조의 value set은 항상 정수라고 가정할 수 있습니다.

dictFilter에서 첫번째 인자로 들어오는 f는 항상 bool을 return한다고 가정해도 좋습니다.

.
.
.


이런 가정이 있다면, dictMap과 dictFilter를 구현하는 것이 조금 더 수월하겠지요.

이해하는데 도움이 되셨나요?
_________________
- soon@ropas
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
박찬



가입: 2007년 4월 13일
올린 글: 9

올리기올려짐: 2007년5월7일 17:50    주제: 많은 도움이 되었습니다. 그런데... 인용과 함께 답변

추가로 질문을 드리려 합니다. 조교님의 노고에 감사하면서...

입력값이 다른 type으로 들어올 때의 error handling을 하려고 하는데 어떻게 해야 하는지 몰라서 질문을 드립니다. 강의에 결석한 적은 없는데 교수님이 그 부분을 설명하실 때에 제가 딴 생각을 했었나 봅니다. 혹, 다음 번 강의인 exceptions에서 다룰 부분인건지...
위로
사용자 정보 보기 비밀 메시지 보내기
공순호



가입: 2005년 9월 29일
올린 글: 363
위치: 302동 312-2호

올리기올려짐: 2007년5월7일 18:26    주제: 인용과 함께 답변

인용:

입력값이 다른 type으로 들어올 때의 error handling을 하려고 하는데 어떻게 해야 하는지 몰라서 질문을 드립니다.



일반적으로 어떤 함수 f에 인자 x가 넘어오고, 이 x의 type에 따라서 다른 일들을 해주고자 할 때에는 다음과 같이 작성하겠지요.

코드:
(define (f x)
 (cond
  ((is-type-A? x) code-for-A)
  ((is-type-B? x) code-for-B)
  (else code-for-error-handling)
 )
)



혹시 이런 식으로 해결하기 어려운 경우에 대해서 질문하신 것이면

당면하신 문제를 예를 들어서 설명해주세요. 그러면 적절한 답변을 생각해서 알려드리겠습니다.
_________________
- soon@ropas
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
박찬



가입: 2007년 4월 13일
올린 글: 9

올리기올려짐: 2007년5월7일 21:42    주제: 제 질문이 좀 애매모호 했던 것 같습니다. 정리를 다시 해서 여쭈자면... 인용과 함께 답변

조교님이 바로 위의 설명에서 인용하신 코드 가운데

code-for-error-handling

가 실제로 어떻게 구현되는지를 모르겠습니다. 또는 조교님이 답변란에서 언급하신 에러 처리를 구체적으로 어떻게 해야 하는지 모르겠습니다. 혹, 이 부분에 관해서 참조할 만한 것이 있다면 그것이 무엇인지만 알려주셔도 감사하겠습니다.


박찬 가 2007년5월7일 21:48에 수정함, 총 1 번 수정됨
위로
사용자 정보 보기 비밀 메시지 보내기
공순호



가입: 2005년 9월 29일
올린 글: 363
위치: 302동 312-2호

올리기올려짐: 2007년5월7일 21:47    주제: 인용과 함께 답변

공지사항 중, "표준 에러 처리 방법"

https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=822

에 따라서 다음과 같이 처리해주시면 되겠습니다.


코드:
(define (plus1 n)
 (cond
  ((is-integer? n) (+ n 1))
  (else (err "인자가 정수가 아닙니다."))
 )
)



숙제에서 사용하는 err은 err 내부에서 전체 프로그램을 종료시키기 때문에

함수 plus1에 integer가 들어오지 않았을 경우에 해당하는 return값은 사실 고려하지 않아도 무방합니다.

하지만, 일반적으로 이렇게 처리하지 않고(즉, 프로그램을 종료시키지 않고) 다르게 처리해야하는 경우도 있을 것 입니다.

그런 경우에는 적절한 메세지를 출력하고, 임의의 return 값을 돌려주도록 하는 방법도 있겠습니다.

이러한 것들은 "그때 그때 달라요."가 되겠네요.


공지사항을 잘 참조하시면, 피할 수 있는 고민들을 피해가실 수 있습니다. ^^..
_________________
- soon@ropas
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
박찬



가입: 2007년 4월 13일
올린 글: 9

올리기올려짐: 2007년5월7일 21:50    주제: 앗.... 부끄러워라... 인용과 함께 답변

고맙고도 죄송하네요...

암튼 감사합니다 조교님..
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Spring 2007) 시간대: GMT + 9 시간(한국)
페이지 11

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


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