【问题标题】:how to implement this deep copy in functional programming style?如何以函数式编程风格实现这种深拷贝?
【发布时间】:2012-10-22 22:44:14
【问题描述】:

给定以下结构:

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

【问题讨论】:

  • 在纯FP中,你不复制,你分享。

标签: functional-programming purely-functional


【解决方案1】:

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

具有纯粹功能偏好的人必须以不同于正常文献的方式对待图表。这就是推动人们创作以下作品的动机:

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

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

---约翰·兰克伯里。 1995. 具有功能特征的图算法。在高级函数式编程中,First International Spring School on Advanced Functional Programming Techniques-Tutorial Text,Johan Jeuring 和 Erik Meijer(主编)。 Springer-Verlag,伦敦,英国,308-331。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 2016-12-03
    • 2013-03-09
    • 2012-02-19
    • 2015-06-12
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    相关资源
    最近更新 更多