SWI-Prolog 中 duplicate_term/2 和 copy_term/2 的区别
Difference between duplicate_term/2 and copy_term/2 in SWI-Prolog
在 SWI-Prolog 中 duplicate_term/2 and copy_term/2 有什么区别?
你能给出他们表现出不同行为的输入吗?
考虑例如:
?- X = f(a),
copy_term(X, Y),
setarg(1, X, b).
X = Y, Y = f(b).
相比之下,创建真正的副本 duplicate_term/2
:
?- X = f(a),
duplicate_term(X, Y),
setarg(1, X, b).
X = f(b),
Y = f(a).
如果这种差异在您的应用程序中存在问题,您的代码可能会通过使用不易出错的纯结构来改进。
例如,如果您离不开它们,请考虑使用属性变量作为破坏性修改的更具声明性的替代方案。最不容易出错和最通用的方法通常是始终坚持使用纯方法。如有必要,提出干净的声明式界面,并将杂质隐藏在它们后面。
在 SWI-Prolog 中 duplicate_term/2 and copy_term/2 有什么区别?
你能给出他们表现出不同行为的输入吗?
考虑例如:
?- X = f(a), copy_term(X, Y), setarg(1, X, b). X = Y, Y = f(b).
相比之下,创建真正的副本 duplicate_term/2
:
?- X = f(a), duplicate_term(X, Y), setarg(1, X, b). X = f(b), Y = f(a).
如果这种差异在您的应用程序中存在问题,您的代码可能会通过使用不易出错的纯结构来改进。
例如,如果您离不开它们,请考虑使用属性变量作为破坏性修改的更具声明性的替代方案。最不容易出错和最通用的方法通常是始终坚持使用纯方法。如有必要,提出干净的声明式界面,并将杂质隐藏在它们后面。