게시판 인덱스

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

이친수 덧셈과 트리 인코딩 관련

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



가입: 2006년 9월 5일
올린 글: 165

올리기올려짐: 2007년3월30일 16:33    주제: 이친수 덧셈과 트리 인코딩 관련 인용과 함께 답변

1. 이친수 덧셈을 구현할 때, 이친수를 정수로 바꾼 뒤 더하고 다시 결과값을 이친수로 바꾸는 방식을 쓰면 안 되겠죠?

2. 1-4번에서 트리 구조 인코딩을 어떻게 해야 하나요? 즉, 조교님이 is-leaf?같은 함수에 인자를 줄 때 어떤 형태로 입력하실 건가요?

tree를 (함수의 인자 등으로) 사용할 때는 언제나 leaf나 node 함수를 call하시는 건가요? 즉 트리의 내부구현 방식은 어떻게 되어도 상관이 없는 것인지요?

3. 만약 그렇다면 잎새나무를 어떻게 인코딩할 수 있나요? 예를 들어 잎새나무를 (leaf 'a)등으로 인코딩 하고 싶다면, 어떻게 해야할까요?


코드:
(define (leaf a) (leaf a))


이렇게 하면 당연히 무한루프 돌아버리고요..

코드:
(define (leaf a) (LEAF a))


이렇게 하면 정의는 되지만 call할 때 LEAF가 정의되지 않았다고 나오는데요.

즉 질문의 요지는 list같은 기본 자료구조 외 사용자정의 타입을 어떻게 만들 수 있느냐하는 것입니다. 단순하게 list로 구현하면 노드와 잎새나무의 구분이 불가능해지니까요.
위로
사용자 정보 보기 비밀 메시지 보내기
공순호



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

올리기올려짐: 2007년3월30일 17:56    주제: 인용과 함께 답변

1. 안됩니다.

인용:
crazy2add은 재귀적으로 정의되야 한다.


물론 재귀적으로 정의한다는 것이 10진수를 바꾸는 것을 완전히 배제하는 것은 아닙니다만, 짜보시면 알겠지만, 2친수와 2친수의 합을 바로 구하는 편이 수월하실겁니다. 결론은 "그렇게 하지 마세요." 입니다.


2.

트리 구조 인코딩을 어떻게 해야하는지 결정하는 것이 4번 문제의 '거의 전부'입니다.

인용:
조교님이 is-leaf?같은 함수에 인자를 줄 때 어떤 형태로 입력하실 건가요?


=> (is-leaf (leaf 3))

이런 식으로 입력하게 되겠지요.

인용:
tree를 (함수의 인자 등으로) 사용할 때는 언제나 leaf나 node 함수를 call하시는 건가요?


=> 주어진 'tree'에 대해서 잘 작동하는지를 볼 때에는 leaf나 node 함수를 이용해서 tree를 만들고 이 것을 인자로 주어서 시험해 보겠습니다.

제가 항상 주어진 'tree'에 대해서만 시험해 볼지는 저도 아직은 잘 모르겠습니다. Smile

3.

인용:
list같은 기본 자료구조 외 사용자정의 타입을 어떻게 만들 수 있느냐하는 것입니다. 단순하게 list로 구현하면 노드와 잎새나무의 구분이 불가능해지니까요.


교과서를 Chapter 2.1.1.을 읽어보시면 "분수" 자료구조를 만드는 것에 관한 내용이 나옵니다.

여기서 중요한 내용 중에 하나는

인용:
we can think of data as defined by some collection of selectors and constructors, together with specified conditions that these procedures must fulfill in order to be a valid representation.


data를 정의할 때에는 그 data를 만드는 방법인 constructor와 그 data를 이용하는 selector를 만들면 됩니다.

이 둘 사이에 항상 성립해야하는 관계만 성립하도록 design한다면, 내부 구현은 어떻게 되어도(너무 이상하면 안되겠지만? Smile) 관계가 없습니다.

예를 들면 분수는

n d 를 받아서 n/d를 만드는 make-rat

n/d 를 받아서 n을 주는 numer

n/d 를 받아서 d를 주는 denom

를 만들어주면 되는데

이들 사이에서는

(numer (make-rat n d)) = n
(denom (make-rat n d)) = d

만을 만족하면 됩니다.

(make-rat n d)를 list로 구현하던, 함수로 구현하던, 어떻게 구현하여도 좋습니다. 위의 조건을 만족한다면 말이지요.


다시 숙제로 돌아오면,

4번/5번 문제는 이러한 data를 design하는 방법을 익히는 문제라고 생각됩니다.

자유롭게 design해도 되기 때문에, 오히려 더 어려움을 느끼시는 것 같습니다.

1. 만들어야하는 것들 어떠한 것인지

2. 그들 사이의 관계가 어떠한 것인지

에 집중하시고, 편안한 마음으로 설계하시면 좋은 결과물을 얻으실 수 있을겁니다.


조교는 (leaf 3), (node (list 3 4))를 수행했을 때에 어떤 결과가 나오는지에 대해서는 신경쓰지 않습니다.

이렇게해서 만들어진 나무들에 대해서 나무들을 이용하는 함수들이 올바른 결과를 만들어내는가를 보도록 하겠습니다.

5번 숙제의 경우도 마찬가지 입니다.

mobile, branch를 어떠한 방식으로 만들어내는지는 여러분의 자유입니다.

조교는 이러한 방식으로 만들어진 mobile에 대한 여러분이 정의한 함수가 올바르게 작동하는지를 검사하겠습니다.
_________________
- soon@ropas
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
장민석



가입: 2006년 9월 5일
올린 글: 165

올리기올려짐: 2007년4월1일 14:45    주제: 인용과 함께 답변

인용:
주어진 'tree'에 대해서 잘 작동하는지를 볼 때에는 leaf나 node 함수를 이용해서 tree를 만들고 이 것을 인자로 주어서 시험해 보겠습니다.


주어진 'tree'란 무엇인가요?
위로
사용자 정보 보기 비밀 메시지 보내기
공순호



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

올리기올려짐: 2007년4월1일 19:56    주제: 인용과 함께 답변

인용:
tree를 (함수의 인자 등으로) 사용할 때


에 함수의 인자로 '주어진' tree 입니다.
_________________
- soon@ropas
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 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