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中,你不复制,你共享。