일부 정규 구조의 큰 트리 (또는 포리스트)를 모델링하려고합니다. 트리는 작은 트리 (불규칙 부분) 및 (즉) 많은 매개 변수 목록으로 분해 될 수 있습니다. 각 노드는 큰 나무의 노드를 만듭니다.데이터, 유형 및 함수를 함께 바인딩
그래서 나무의 각 노드가 많은 노드를 나타내는 데이터 구조가 필요합니다. 그리고 실제 노드는 유형 (노드, 매개 변수)입니다.
해당 종류의 나무에서 작동하는 알고리즘의 경우 해당 매개 변수가 중요하지 않습니다. 그들은 그냥 자리 표시 자입니다. 그러나 일부 데이터는 일반 매개 변수 또는 노드와 매개 변수의 조합에서 추출 할 수 있어야하며 모든 가능한 매개 변수는 반복 가능해야합니다. 모든 종류의 데이터는 apriori로 알려져 있으며, 그 트리의 의미를 반영합니다.
그래서 실제 유형, 의미 및 매개 변수는 트리의 구현에 달려 있습니다.
params 유형에 중첩 된 typedef를 사용하고, 알고리즘에 사용할 수있는 모든 종류의 것들에 대한 고정 메소드 이름 (이 두 가지 개념을 함께 사용)과 알고리즘 자체에 대한 템플릿을 사용하여 C++로 모델링합니다.
e.e. 큰 트리의 각 노드와 정수를 연관 시키려면 함수 int data(const node& n, const param& p)
을 제공하고 param
은 중첩 된 typedef로 사용할 수 있으며 알고리즘은 사용 가능한 모든 매개 변수의 목록을 가져올 수 있으며 data
을 관심있는 노드와 각 매개 변수로 호출 할 수 있습니다 이
data Tree = Node [Tree] | Leaf
가 지금은 패키징 할 같은
나는, 일부 일반 데이터 유형, 즉 트리 데이터를 가지고 :
- 콘크리트 트리
- 몇 가지 유형 (즉, 콘크리트) 트리 노드 (즉)에서 작동
- 일부 기능은 그래서 하나는이 패키지 사용하는 일부 기능을 쓸 수
값 유형의 일부 값
어떻게 달성할까요? 형 가족과 함께
나는 형의 가족이 typeclass 인수에 따라 자신의 회원의 유형을 원하기 때문에 지금 Tree t
될
class PackagedUp t where
type Value t
tree :: Tree t
values :: [Value t]
f :: Tree t -> Value t -> Int
Tree
왔다.
또한, 주사제를 다루는 유형 계열은 https://stackoverflow.com/a/16927632/1227578과 같이 필요합니다. 이와
나는
instance PackagedUp MyTree where
type Value MyTree = (Int,Int)
tree = Leaf
values = [(0,0),(1,1)]
f t v = fst v
어떻게
는 이제 함수를 작성 할 수 있습니까? 나는. 나무의 근원을 이루는 함수, 모든 값은[Int]
모두 f tree value
입니다.모든
'Tree'에 대한 정의는 원하는 것이 아니며, 문제를 해결하기 위해 가족을 입력 할 필요가 없다고 확신합니다. 그러나 유용한 답변을 제공하기 위해서는'f'가 원하는 것을 알 필요가 있습니다. 코드에서 명확하지 않기 때문입니다. – duplode
사실 어떤 종류의 게임 트리를 모델링하고 싶습니다. 문제의 설명을 드리겠습니다. 저는 이미 C++에서 그렇게했으며, 지금은 하스켈로 이식하려고합니다. 왜 그런지 묻지 말아주세요) –
나는 당신이 복잡하게 생각합니다. 번들하려는 내용으로 모듈을 만드십시오. – augustss