내가 표현 나무가 왼쪽에서 오른쪽 열거합니다.재귀는 무한 트리 나는 왼쪽에서 오른쪽으로 카운팅, 각 노드에 번호 <code>n</code>을 할당 할</p> <pre><code>type LazyTree<'T> = | LazyBranch of 'T * ('T LazyTree list Lazy) </code></pre> <p>에 의해
더 공식적으로
편집 : 노드 a
를 들어
, h(a)=0
a
는 노드 a
를 들어 아이
p
와 노드
a
를 들어
, h(a)=h(p+1)
가없는 경우 , 부모가없는 경우 L(a)
은 빈 세트입니다.
a
, 들어
, L(a)
이 루트에서 각 노드 i
, 경로 노드 a
를 들어 a
를 포함하지 않는 모든 노드의 집합입니다, S(a)
는 모든 요소이다 각 요소 i
h(i)<=h(a)
보유 L(a)
, I는 S(a)
의
a
값을 바꿔야
부작용이없는 문제점을 해결할 수 없습니다.
내 함수는 트리를 반환해야합니다.
노드는 왼쪽 형제 노드에 종속됩니다. 따라서 함수는 'T LazyTree Option
을 매개 변수로 가져야합니다.
하지만 가장 왼쪽에있는 자식은 우리에게 가장 가까운 형제에 종속됩니다. 우리는 무한한주기를 가졌습니다.
나는 유한 트리에서 어떻게 해결해야 하는지를 묻지 않는다.
추상적 인 개념에 대해서는 묻지 않습니다. 여기 내가 다른 하나 무한 트리를 반환 할 수있는 방법입니다 :
type LazyTree<'T> =
| LazyBranch of 'T * ('T LazyTree list Lazy)
with
member this.Item = match this with LazyBranch(item,_) -> item
member this.Children = match this with LazyBranch(_,children) -> children
member this.Map func =
let children =
lazy
(
this.Children.Force()
|> List.map (fun child -> child.Map func)
)
LazyBranch(func this.Item, children)
어떤 솔루션을 가지고 왔으며 어떤 부작용이 있습니까? –
나는 한정된 나무를위한 해결책을 생각해 냈습니다. 방금 목록으로 이동 한 다음 해당 목록에서 트리 구조를 복원했습니다. 거기서 일하지 않을거야. 나는 부작용으로 해결하려고하지 않았다. – user2136963
투표를 끝내기로 결정했다면 해결책을 제시하지 않고 의견을 말할 수 있다면 해결할 수 있는지 설명해주십시오. – user2136963