簡體   English   中英

Prolog 的頂層在打印結果時是否使用了錯誤的運算符?

[英]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 = ZX == 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM