में मल्टीवे ट्री पर मोड़/रिकर्सन मैं मल्टीवे पेड़ के लिए आवेदन करने के लिए ब्रायन के पेड़ के लिए ब्रायनरी पेड़ (http://lorgonblog.wordpress.com/2008/04/06/catamorphisms-part-two/) को अनुकूलित करने की कोशिश कर रहा हूं।एफ #
ब्रायन के ब्लॉग से सारांश:
डाटा संरचना:
type Tree<'a> =
| Node of (*data*)'a * (*left*)Tree<'a> * (*right*)Tree<'a>
| Leaf
let tree7 = Node(4, Node(2, Node(1, Leaf, Leaf), Node(3, Leaf, Leaf)),
Node(6, Node(5, Leaf, Leaf), Node(7, Leaf, Leaf)))
बाइनरी ट्री तह समारोह
let FoldTree nodeF leafV tree =
let rec Loop t cont =
match t with
| Node(x,left,right) -> Loop left (fun lacc ->
Loop right (fun racc ->
cont (nodeF x lacc racc)))
| Leaf -> cont leafV
Loop tree (fun x -> x)
उदाहरण
let SumNodes = FoldTree (fun x l r -> x + l + r) 0 tree7
let Tree6to0 = FoldTree (fun x l r -> Node((if x=6 then 0 else x), l, r)) Leaf tree7
मल्टीवे ट्री संस्करण[नहीं (पूरी तरह से) काम कर]:
डेटा संरचना
type MultiTree = | MNode of int * list<MultiTree>
let Mtree7 = MNode(4, [MNode(2, [MNode(1,[]); MNode(3, [])]);
MNode(6, [MNode(5, []); MNode(7, [])])])
तह समारोह
let MFoldTree nodeF leafV tree =
let rec Loop tree cont =
match tree with
| MNode(x,sub)::tail -> Loop ([email protected]) (fun acc -> cont(nodeF x acc))
| [] -> cont leafV
Loop [tree] (fun x -> x)
उदाहरण 1 रिटर्न 28 - मैंने सोचा था कि MFoldTree
कहीं एक map.something
जरूरत थी लेकिन मुझे मिल गया काम करने के लिए
let MSumNodes = MFoldTree (fun x acc -> x + acc) 0 Mtree7
उदाहरण 2
नहीं चलता है
let MTree6to0 = MFoldTree (fun x acc -> MNode((if x=6 then 0 else x), [acc])) Mtree7
शुरू में लगता है यह इसके बजाय @
ऑपरेटर के साथ काम करने के लिए।
दूसरे उदाहरण पर कोई मदद और MFoldTree
फ़ंक्शन में मैंने जो किया है उसे ठीक करने के लिए बहुत अच्छा होगा!
चीयर्स
dusiod
हाय जोसेजुआन, यह समाधान पहले मामले के लिए काम करता है, लेकिन दूसरे का इरादा पूरे पेड़ को संशोधित करना है ताकि उदाहरण के लिए मूल्य 6 वाला कोई नोड्स अब 0 हो। उदाहरण 1 का दूसरा विकल्प है: 'एमएफओल्ड ट्री 2 पेड़ = दोबारा लूप पेड़ = के साथ पेड़ मैच करें। एमएनओडी (एक्स, उप) :: पूंछ -> एक्स + (लूप उप) + (लूप पूंछ) | [] -> 0 लूप पेड़ ' – dusiod
@ ड्यूशन जो' गुना 'नहीं है! एक 'नक्शा' है! : डी (मैंने समाधान अद्यतन किया है) – josejuan