이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
김재왕
가입: 2007년 3월 31일 올린 글: 10
|
올려짐: 2007년4월2일 0:11 주제: 1-5 모빌에서 사용가능한 프로시져... |
|
|
(list x) (car x) (cdr x) (cons x y) 등등도 사용하면 안되는건가요?
아무리 생각해도 재귀구현이라도 인자값을 변경해서 재귀호출시에
+ - 등은 쓸테니... 이런건 오퍼레이터인가요?
아직 프로시져랑 함수가 어떻게 다른건지 모르겠습니다 T^T;
leaf는 하나의 값만을 받아서 하나의 잎새나무만을 만들고
노드는 리스트를 받아서 나무를 만드는데
cons가 없다면 가지 안에 길이와 모빌을 같이 저장할 방법이;;
그리고 모빌안에 두개의 가지를 넣을 방법도;
think very hard라면;
leaf와 node만 가지고도 해결할 방법이 생길까요..? |
|
위로 |
|
|
공순호
가입: 2005년 9월 29일 올린 글: 363 위치: 302동 312-2호
|
올려짐: 2007년4월2일 0:24 주제: |
|
|
1.
4번 문제를 구현하실 때에는
말씀하신 list, cons, car, cdr,... 모두 이용하셔도 무방합니다.
하지만, 5번 문제를 풀이하실 때에는, 안됩니다.
5번 문제에서 이용하실 수 있는 것은
4번 문제에서 정의하신 함수들과
'+' 함수 입니다. (<- 이부분은 숙제 스펙에서 예외가 되겠군요.)
2.
인용: | leaf와 node만 가지고도 해결할 방법이 생길까요..? |
그렇습니다.
더 말씀을 드리자면, 4번에서 정의한 다른 함수들(ex: nth-child, ..)도 이용하셔야 할 겁니다. (아, 5번문제 전체를 해결하기 위해서 말입니다.)
3.
다시 말씀드리지만
자유롭게 구현하세요.
꼭 이렇게 '구현' 되어야 한다는 것은 없습니다. _________________ - soon@ropas |
|
위로 |
|
|
김재왕
가입: 2007년 3월 31일 올린 글: 10
|
올려짐: 2007년4월2일 7:06 주제: |
|
|
그렇다면 +는 함수였던거군요...
if는 스페셜폼인가요?
= * -의 경우는?
if와 =혹은 equal?등이 사용 가능하긴 한거죠..?
다른건 몰라도 if만은 꼭 사용가능해야 할것 같은데;
음... 제가 왜 cons나 list를 사용할수 없냐고 물어봤냐면
leaf와 node가 모두 인자를 하나만 취하기 때문인데요,
5번문제의 함수중에 make-branch와 make-mobile은
인자를 두개 받더라구요.
특히 make-mobile같은 경우는...
node를 사용하기 위해서는 인자로 리스트를 넘겨줘야 하는데
cons나 list를 안쓰고 리스트를 만들 방법이; |
|
위로 |
|
|
공순호
가입: 2005년 9월 29일 올린 글: 363 위치: 302동 312-2호
|
올려짐: 2007년4월2일 10:13 주제: |
|
|
1.
예, 그렇습니다.
> +
#<primitive:+>
2.
예, 그렇습니다.
> if
if: bad syntax in: if
3.
함수라고 보시면 되겠네요.
> =
#<primitive:=>
> *
#<primitive:*>
> -
#<primitive:->
>
4.
인용: | if와 =혹은 equal?등이 사용 가능하긴 한거죠..?
다른건 몰라도 if만은 꼭 사용가능해야 할것 같은데; |
말씀하신 것들은 이용가능합니다.
5.
5번 문제에서 4번 문제에서 정의한 함수만을 이용하라는 것의 의미는
4번에서 디자인한 data를 생성하거나 접근할 때에 4번에서 만든 함수만을 이용해서 수행하라는 뜻입니다.
교과서 88 page에 보면 Figure 2.1 Data-abstraction barriers in the rational number package. 라는 그림이 있습니다.
이 그림과 관련 내용을 읽어보시면 5번 문제에서의 제약 사항이 어떠한 의미를 가지는지에 대해서
보다 분명하게 이해하실 수 있으리라 생각됩니다.
예를 들어서
weight함수를 제작하시다보면 mobile에 들어있는 무게를 접근하실 필요가 있습니다.
mobile 자체는 4번에서 정의한 함수로 구현되어 있겠지요.
mobile의 무게를 접근할 때에 4번에서 정의한 함수를 이용해서 접근해야지
이러한 것을 무시하고 직접 내부 구조를 파고 들어가서(list의 경우라면 car/cdr...)
그 값을 읽어내고, 이용하게 되면 Data-abstraction barrier를 넘어서게 되는 것이고
이러한 것을 하지 말라는 것이 5번의 의미입니다.
즉, 막무가내로 "이 함수는 이용하면 옳지 않다." 라는 것이 아닙니다. 이 Data-abstraction barrier을 넘어서는 일을 하면 안되는 것입니다.
6. 이 주제의 첫번째 답변에서 제가 실수를 했습니다.
인용: |
노드는 리스트를 받아서 나무를 만드는데
cons가 없다면 가지 안에 길이와 모빌을 같이 저장할 방법이;; |
김재왕님의 최초의 질문이 이것이었지요.
저는 node와 leaf만 가지고 된다고 했습니다만, 옳지 않은 답변입니다.
다시 답변드립니다.
node는 tree list를 받아서 tree를 만들어줍니다.
tree를 받아서 tree list를 만드는 연산을 제공하는 함수는 4번에 정의되어 있지 않습니다.
tree를 받아서 tree list를 만드는 행위가 Data-abstraction barrier을 깨뜨리는 것은 아니고요.
따라서 이 부분이 필요하신 것이라면 4번 문제 외부에서 제공되는 함수를 이용하셔도 좋습니다.
아마도 list가 이용되겠네요.
답답한 고통을 안겨드려서 죄송합니다.
앞으로는 심사숙고해서 답변드리도록 하겠습니다. 죄송합니다. _________________ - soon@ropas |
|
위로 |
|
|
손님
|
올려짐: 2007년4월2일 12:21 주제: |
|
|
제가 질문에 서툴러서;
여러가지 질문을 한행으로 만들어 올리고
구분되야 하는 내용들을 문단으로 나누지 않고 순서도 뒤죽박죽으로
한 문단안에 다 기술해버려서 질문과 그 질문에서 묻고자 하는 예시와
또 다른 질문들이 행간에 묻히니까 그렇게 된 것 같습니다;
원인을 따지자면 잘못.. 이라고 하기는 그렇고 실수는 제 쪽에서
먼저 한게 아닌가 생각됩니다 ^^ |
|
위로 |
|
|
|