【发布时间】:2023-04-09 03:24:01
【问题描述】:
在纯函数式编程中,我们不会修改函数的任何参数。那么,我们如何设计一个函数来添加一个元素到它的参数,一个列表呢?例如,function list add (elem, list)。这个问题类似于这个帖子:Functional programming: state vs. reassignment。
我的猜测解决方案是深拷贝输入列表,然后使用append 等一些破坏性操作来操作新列表。我说的对吗?
附加
我从图形复制算法中复制以下代码:
// in Node
public Node deepCopy(Map<Node, Node> isomorphism) {
Node copy = isomorphism.get(this);
if (copy == null) {
copy = new Node();
isomorphism.put(this, copy);
for (Node connection: connections) {
copy.connections.add(connection.deepCopy(isomorphism));
}
}
return copy;
}
要对图进行深度复制,必须跟踪正在复制的每个节点。在宇宙中,我们使用isomorphism 参数来做到这一点。我认为制作这个deepCopy 操作的纯函数版本的唯一方法是不仅返回变量copy,而且还返回一个指示返回节点是否为新节点的标志。对吧?
【问题讨论】:
-
@hammar 这才是我真正关心的问题:这种新的对象创建操作可能非常昂贵。