鉴于以下结构:
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
。
答案 0 :(得分:2)
发布此问题后,我认真做了一些调查。我的发现是函数式编程不擅长处理热门 图算法。
纯粹功能性的人必须以与普通文献不同的方式对待图表。这是推动人们产生以下作品的动机:
图形算法长期以来一直是纯粹编程的挑战 功能语言。以前的尝试要么倾向于 不可读,或未能达到标准的渐近复杂性 的措施。
--- John Launchbury。具有功能性发光的图算法。在高级功能编程,第一国际高级功能编程技术春季学校 - 教程文本,Johan Jeuring和Erik Meijer(编辑)。 Springer-Verlag,英国伦敦,308-331。