| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
박건호
가입: 2009년 9월 25일 올린 글: 3
|
올려짐: 2009년9월25일 18:58 주제: 1번문제에 대해 질문있습니다. |
|
|
한참을 고민해봤는데요 잘 모르겠어서 그런데요...
leaf 랑 tree가 어떻게 생긴 애들인지를 잘모르겠네요 ㅠㅠ
그리고 잎새나무와 그냥 나무의 차이를 모르겠네요 ㅠㅠ
leaf랑 node의 간단한 예랑 어떤 나무가 만들어지는지 알려주시면 안될까요? |
|
| 위로 |
|
 |
윤용호
가입: 2008년 9월 23일 올린 글: 257
|
올려짐: 2009년9월26일 11:39 주제: Re: 1번문제에 대해 질문있습니다. |
|
|
최대한 그림처럼 표현해보도록 노력해보죠.
(leaf 1)에 의해 생성된 tree는 잎새입니다. 편의상 잎새는 [] 로 싸도록 하겠습니다.
[1]
(node (list (leaf 1) (leaf 2))) 로 생성한 tree는 가지입니다. 잎새가 두개 매달려 있습니다.
___ㅗ___
| |
[1] [2]
(node ()) 로 생성한 tree는 빈 나무입니다.
|
(node (list () ()))
이것으로는 나무를 생성할 수 없습니다. node가 받은 리스트가 tree의 리스트가 아니라 빈 리스트의 리스트니까요. 타입 에러입니다.
(node (list (leaf ()) (leaf ()) (leaf ()))) 로 생성한 나무는 잎새가 세개이며 각 잎새에 '빈 리스트'가 들어있는 가지입니다.
_____ㅗ_____
| | |
[()] [()] [()]
(node (list (node ()) (node ()) (node ())))
이것은 빈 가지 세개를 매달고 있는 굵은 가지입니다.
____ㅗ___
| | |
| | |
(node (list (node (list (leaf 1) (leaf 2))) (node (list (leaf 3) (leaf 4))))) 이것은 가지 두개를 매달고 있는 굵은 가지이고, 각 가지에는 잎새가 2개씩 달려있으며 그 잎새에는 1, 2, 3, 4가 각각 들어있는 나무입니다.
_____ㅗ____
| |
__ㅗ__ ___ㅗ__
| | | |
[1] [2] [3] [4]
(node (list (node (list (leaf 1) (leaf 2))) (node ())))
이것은 위와 비슷하지만 오른쪽에 leaf 3, leaf 4가 매달린 가지 대신 빈 가지가 매달린 나무입니다.
_____ㅗ____
| |
__ㅗ__ |
| | |
[1] [2] |
(node (list (node (list (leaf 1) (leaf 2))) (leaf 3)))
이것은 역시 위와 비슷하지만 오른쪽에 빈 가지 대신 잎새 3이 매달려 있습니다.
_____ㅗ____
| |
__ㅗ__ |
| | |
[1] [2] [3]
타입으로 표현해보자면
type tree = leaf of "anythinig"
| node of "tree list"
즉, 타입이 '트리'가 아닌 것을 트리에 매달려면 반드시 leaf를 통해야만 하며, (물론 leaf에 또다른 트리가 매달린 구조도 가능합니다. leaf엔 '무엇이든' 달수 있으니까요. 원한다면 함수도 매달아도 되겠네요.)
node에는 반드시 타입이 '트리'인 것들의 리스트만이 들어와야 합니다. 즉 node에 직접 tree가 아닌 무언가를 매달수는 없습니다.(이것이 자료구조 시간에 배웠을 tree와 다른 점입니다.)
도움이 되었나요? |
|
| 위로 |
|
 |
노건일
가입: 2009년 9월 26일 올린 글: 50
|
올려짐: 2009년9월26일 11:56 주제: |
|
|
그렇다면,
(node (list () ()))
을 입력받으면 타입에러가 발생하고
(node (list (node ()) (node ())))
을 입력받으면
( () () ) <--- 이런 트리가 생성되는건가요? |
|
| 위로 |
|
 |
노건일
가입: 2009년 9월 26일 올린 글: 50
|
올려짐: 2009년9월26일 12:03 주제: |
|
|
제가 개념이 잘 안잡혀서..
엄한 질문들도 어여삐 봐주시길 바래요
1. (leaf 1) 의 결과값은 (1)인가요?
아니면, ('l 1)과 같이 leaf tree라는 특별한(임의의) 표식을 해도 되나요?
2. (node (list a b))일 경우,
a와 b 둘다 tree일 경우에만 에러를 발생하지 않는건가요?
아니면 tree가 아닌놈은 무시하고 tree인 놈만 사용해서 node tree를 만드나요? |
|
| 위로 |
|
 |
장수원
가입: 2008년 9월 26일 올린 글: 167
|
올려짐: 2009년9월26일 13:36 주제: |
|
|
| 노건일 씀: | 그렇다면,
(node (list () ()))
을 입력받으면 타입에러가 발생하고
|
넵
| 인용: |
(node (list (node ()) (node ())))
을 입력받으면
( () () ) <--- 이런 트리가 생성되는건가요? |
'( '() '() ) 가 트리인지 아닌 지는 알 수 없습니다. 다만 "/\" 모양의 트리가 만들어 지겠죠. |
|
| 위로 |
|
 |
장수원
가입: 2008년 9월 26일 올린 글: 167
|
올려짐: 2009년9월26일 13:39 주제: |
|
|
| 노건일 씀: | 제가 개념이 잘 안잡혀서..
엄한 질문들도 어여삐 봐주시길 바래요
1. (leaf 1) 의 결과값은 (1)인가요?
아니면, ('l 1)과 같이 leaf tree라는 특별한(임의의) 표식을 해도 되나요?
|
트리가 내부적으로 어떻게 표현지는 원하시는 대로 하면 됩니다. 단 문제의 요구를 다 충족해야 합니다. 채점을 할 때도 내부 구조에 대한 가정은 하지 않겠습니다.
| 인용: |
2. (node (list a b))일 경우,
a와 b 둘다 tree일 경우에만 에러를 발생하지 않는건가요?
아니면 tree가 아닌놈은 무시하고 tree인 놈만 사용해서 node tree를 만드나요? |
(node) 는 트리의 리스트를 입력으로 받는 함수입니다. 그 외의 다른 타입은 받지 않아야 겠죠. |
|
| 위로 |
|
 |
|