[英]Does Prolog's toplevel use the wrong operator when printing results?
我一直在盯着 Prolog 這樣的頂級結果有一段時間了:
?- reverse([X,Y,Z],[Y,Z,Y]).
X = Y, Y = Z.
我突然想到:不應該說
?- reverse([X,Y,Z],[Y,Z,Y]).
X == Y, Y == Z.
因為=
是統一,而==
是術語相等。 這就是 Prolog真正想說的:這些術語是相等的,(它們微不足道地統一。是未綁定的變量)。
歷史葡萄干的壞案例?
邏輯上X = Y, Y = Z
和X == Y, Y == Z
是不一樣的。 你可以自己試試:
?- X = f(_,a), Y = f(b,_), X = Y, Y = Z.
X = Y, Y = Z, Z = f(b, a).
?- X = f(_,a), Y = f(b,_), X == Y, Y == Z.
false.
所以他們說兩種不同的東西。 只有X = Y, Y = Z
對應於 reverse 的作用:
?- X = f(_,a), Y = f(b,_), reverse([X,Y,Z],[Y,Z,Y]).
X = Y, Y = Z, Z = f(b, a).
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.