2017-04-20 19 views
1

我很困惑,爲什麼[a,b,c,d]和[a,b | [c,d]]統一。從我的有限理解來看,「|」操作員分割頭部和尾部,產生[a,b]和[[c,d]]。那麼這個帶有明顯雙列表的結果對象怎樣才能與第一個的c,d相結合呢?序言爲什麼這兩個項目統一?

+0

您可以測試統一運算符(=)/ 2如何以'?[a,b,c,d] = [a,b | T]表現。 T = [c,d] .'。沒有雙重名單! – CapelliC

回答

1

列表[a,b,c,d][a,b|[c,d]]是一樣的東西,「|」將列表拆分爲頭a和尾號[b,c,d](請參閱@Will Ness的評論)。看看下面,以便更好地理解它:

[a,b,c] unifies with [Head|Tail] resulting in Head=a and Tail=[b,c] 

[a] unifies with [H|T] resulting in H=a and T=[] 

[a,b,c] unifies with [a|T] resulting in T=[b,c] 

[a,b,c] doesn't unify with [b|T] 

[] doesn't unify with [H|T] 

[] unifies with []. Two empty lists always match 

在第二個例子中,你可以看到[a]是相同的,以[a|[]],並在第三個例子:[a,b,c][a|[b,c]]這是同你的例子統一。

+1

「'|'將列表分割爲頭部[a,b]和尾部[c,d]'」 - 否。嘗試'[a,b,c,d] = .. X.','[a | [b,c,d]] = .. Y.','[a | [b | [c,d]] ] = .. Z.'看看發生了什麼。 –

+0

@Will Ness,對於最近的回覆感到抱歉,你有權利,你的評論是非常有幫助和重要的,我編輯了答案,謝謝! – coder

+0

很高興幫助。 :) –

相關問題