एक कार्यात्मक पैटर्न विकल्प प्रकार का उपयोग:
जब आप इस तरह के एक पेड़ या एक सूची के रूप में एक पुनरावर्ती डेटा संरचना के कुछ हिस्सों, बदलने की जरूरत है, आप के रूप में मौजूदा डेटा संरचना के रूप में ज्यादा पुन: उपयोग करना चाहते हैं मुमकिन। विकल्प प्रकार इसमें सहायता कर सकते हैं। इन दोनों कार्यों दोनों 7, साथ नंबर 5 की सभी घटनाओं की जगह लेकिन पहले एक प्रतियां पूरे पेड़। दूसरा नहीं है।
type Tree = Leaf of int
| Node of Tree * Tree
let rec replace_no_sharing tree =
match tree with
| Leaf 5 -> Leaf 7
| Leaf x -> Leaf x
| Node (a, b) -> Node (replace_no_sharing a, replace_no_sharing b)
let replace_with_sharing tree =
let rec replace_option tree =
match tree with
| Leaf 5 -> Leaf 7 |> Some
| Leaf x -> None
| Node (a, b) -> match replace_option a, replace_option b with
| None, None -> None
| Some a, Some b -> Node (a, b) |> Some
| Some a, None -> Node (a, b) |> Some
| None, Some b -> Node (a, b) |> Some
match replace_option tree with
| None -> tree
| Some tree -> tree
यह सभी मामलों में आवश्यक नहीं हो सकता है, लेकिन यह जानना एक अच्छी तकनीक है।
स्रोत
2009-05-17 21:48:36