我是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