2012-01-24 81 views
2

是兩個[a,b,c,d,e]還是[[X] | [b,c,d,e]]是否可以統一?我需要確認我認爲他們不是因爲你不能以任何方式得到[X] = a?Unifiable Prolog條款

回答

2

我認爲你需要統一[X | [b,c,d,e]]而不是[[X] | [b,c,d,e]],即你可以得到X=a,而不是[X]=a

3

你的假設是正確的:[X],我們可以改寫爲.(X,[])不能與原子a統一。

我們可以將[X|[b,c,d,e]]改寫爲.(_G231,.(b,.(c,.(d,.(e,[]))))),即[X,a,b,c,d,e]

您可以使用display/1查看沒有語法糖的形狀。

1

如果X由於某種原因需要被包含在一個列表中,那麼您將無法將其統一(如chac所述)。但您可以使用追加謂詞來獲得匹配:

?- append([X], [b,c,d,e], [a,b,c,d,e]). 
X = a