我是F#的新手,學習基礎知識。我有兩個模組。一個通用的一個樹的數據結構稱爲Tree
:是否可以將參數傳遞給F#模塊?
module Tree
let rec getDescendants getChildren node =
seq { yield node
for child in getChildren node do
yield! getDescendants getChildren child }
let isLeaf getChildren node = Seq.isEmpty (getChildren node)
let getLeaves getChildren node = getDescendants getChildren node
|> Seq.filter (isLeaf getChildren)
正如你可以看到,所有的功能有getChildren
的說法,這是一個函數, 枚舉給定類型的節點的孩子。
第二模塊處理XML樹的更具體的情況下:
module XmlTree
open System.Xml.Linq
let getXmlChildren (node : XElement) = node.Elements()
let getDescendants = Tree.getDescendants getXmlChildren
let getLeaves = Tree.getLeaves getXmlChildren
let isLeaf = Tree.isLeaf getXmlChildren
具體getXmlChildren
函數爲XML節點被定義,並傳遞給所述 咖喱Tree
功能。
現在有很多代碼重複。
是否有可能做到這一點? (僞)
module XmlTree = Tree with getChildren = fun (node : XElement) -> node.Elements()
請問您能更具體一點嗎? 上述示例如何使用泛型? thx – 3dGrabber
@ 3D-Grabber - 查看更新後的答案 –
John,似乎你已經提供了一個通用的**類型**,可以**代表任何節點類型的樹,但問題是詢問一個通用的**模塊**可以**在任何節點類型的樹上操作**。 – TheQuickBrownFox