SWI-Prolog中duplicate_term/2和copy_term/2之間的區別是什麼?SWI-Prolog中duplicate_term/2和copy_term/2之間的區別
你可以給他們顯示不同行爲的輸入嗎?
SWI-Prolog中duplicate_term/2和copy_term/2之間的區別是什麼?SWI-Prolog中duplicate_term/2和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).
如果這種差異是在應用程序中存在問題,有可能你的代碼可以通過使用純粹改進的結構更容易出錯。
例如,可以考慮使用歸因變量爲破壞性修改一個較爲聲明選擇,如果你不能沒有 他們。最容易出錯和最普遍的方法通常是始終堅持純粹的方法。如果有必要,拿出乾淨的聲明性接口,並將它們隱藏在 之後。
它顯示您是否使用setarg/3。但是,那麼,你真的不應該使用setarg/3 - 完全malaprop。 – false