自我递归的clojure多方法是嵌套分类问题的好设计吗?

时间:2011-03-01 19:57:00

标签: recursion clojure multimethod

我有大量的数据映射,每个地图都需要以嵌套的方式进行分类。

即。给定项目可以是A或B(由函数确定),如果它是B,那么它可以是C或D(由另一个函数确定),依此类推。在每个阶段,可以向每个地图添加与分类有关的更多数据。进行分类的功能本身非常复杂,可能需要引入额外的数据来进行分类。

自我递归的多方法是构建代码的好方法吗?我会根据目前确定的项目发送最具体的类型,或者在没有其他任何事情可以做的时候返回最佳的当前分类。

可以在单个分类函数中使用嵌套ifs获得所需的效果,但是gosh很难看。

这方面的多方法是否合适,或者我是否过于复杂化并错过了构建代码的简单方法?

2 个答案:

答案 0 :(得分:1)

似乎多方法可能在这里很有用。我猜所有的复杂性都在调度函数中?因此,一旦您对顶级进行分类,您再次使用触发不同实例的更多信息来激发多方法?

另一种认为这种方法是基于遍历决策树而不是遍历输入。我想知道使用clojure.zip遍历分类函数树是否是一个有趣的解决方案。您在每个节点的分类功能可以告诉您下一步如何遍历树(要去哪个孩子)。你不需要clojure.zip,但它已经有了树导航。

答案 1 :(得分:0)

多方法很棒,因为当问题的复杂性需要它时,它们允许这种级别的分派。如果它能做你想做的事,我会说它。

也许您可以构建一个isa hierarchy来帮助

相关问题