Functional programming 如何以函数式编程风格实现这种深度复制?

Functional programming 如何以函数式编程风格实现这种深度复制?,functional-programming,purely-functional,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) {

鉴于以下结构:

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

在发布了这个问题之后,我认真地做了一些调查。我的发现是函数式编程不擅长处理流行的图算法

纯功能性偏好的人必须以不同于正常文献的方式对待图形。这就是促使男性创作以下作品的动机:

  • 具有深度优先搜索的函数图算法
  • 函数式编程语言中的图算法
  • 归纳图与函数图算法
  • 纯功能数据结构
  • 具有函数风味的图算法
长期以来,图形算法一直是纯编程的挑战 函数式语言。以前的尝试要么倾向于 不可读,或未能达到标准的渐进复杂性 措施


---约翰·兰斯伯里。1995带有函数Flavous的图算法。在高级函数编程方面,第一所关于高级函数编程技术的国际春季学校教程,Johan Jeuring和Erik Meijer(编辑)。Springer Verlag,伦敦,英国,308-331。

在纯FP中,你不复制,你共享。