如何在函数式编程风格中实现这个深层复制?

时间:2012-10-22 22:44:15

标签: functional-programming purely-functional

鉴于以下结构:

class G {
    Node[] nodes;
}
class Node {
    Node neighbour;
}

深度复制操作可以定义为:

function G copy (G g) {
    G r = new G();
    Map isom = new Map();
    for (Node node in g.nodes) {
        Node c = isom.get(node);
        if (c == null) {
            c = copy(node, isom);
            isom.put(node, c);
        }
        r.nodes.add(c);
    }
    return r;
}
function Node copy(Node n, Map isom) {
    Node r = isom.get(n);
    if (r == null) {
        r = new Node();
        isom.put(n, r);
        r.neighbour = copy(n.neighbour);
    }
    return r;
}

我的问题是如何设计一个函数copy(Node n, Map isom),这样它就不会以函数式编程样式改变参数isom

1 个答案:

答案 0 :(得分:2)

发布此问题后,我认真做了一些调查。我的发现是函数式编程不擅长处理热门 图算法

纯粹功能性的人必须以与普通文献不同的方式对待图表。这是推动人们产生以下作品的动机:

  • 深度优先搜索的功能图算法
  • 图算法懒函数编程语言
  • 归纳图和功能图算法
  • 纯功能数据结构
  • 具有功能味的图算法
  

图形算法长期以来一直是纯粹编程的挑战   功能语言。以前的尝试要么倾向于   不可读,或未能达到标准的渐近复杂性   的措施。

--- John Launchbury。具有功能性发光的图算法。在高级功能编程,第一国际高级功能编程技术春季学校 - 教程文本,Johan Jeuring和Erik Meijer(编辑)。 Springer-Verlag,英国伦敦,308-331。