我很困惑,爲什麼[a,b,c,d]和[a,b | [c,d]]統一。從我的有限理解來看,「|」操作員分割頭部和尾部,產生[a,b]和[[c,d]]。那麼這個帶有明顯雙列表的結果對象怎樣才能與第一個的c,d相結合呢?序言爲什麼這兩個項目統一?
回答
列表[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]]
這是同你的例子統一。
「'|'將列表分割爲頭部[a,b]和尾部[c,d]'」 - 否。嘗試'[a,b,c,d] = .. X.','[a | [b,c,d]] = .. Y.','[a | [b | [c,d]] ] = .. Z.'看看發生了什麼。 –
@Will Ness,對於最近的回覆感到抱歉,你有權利,你的評論是非常有幫助和重要的,我編輯了答案,謝謝! – coder
很高興幫助。 :) –
- 1. 這兩個函數序言指令序列有什麼區別?
- 2. 爲什麼'Q'在這個PROLOG程序中不統一
- 3. 爲什麼一個網站項目調試但不是其他? (這兩個項目構建。)Visual Studio 2008
- 4. 這兩個程序的輸出有什麼區別,爲什麼?
- 5. 爲什麼listview顯示最後一個項目兩次?
- 6. 爲什麼在一個項目
- 7. 這個GC系統爲什麼壞?
- 8. Zipfian vs統一 - 這兩個YCSB分佈有什麼區別?
- 9. 請問JavaScript中這兩個項目有什麼區別?
- 10. 爲什麼我的項目不能在兩個不同的系統上構建
- 11. 釣魚爲一個項目的語言
- 12. 爲什麼這個查詢成功,並在序言中失敗?
- 13. 爲什麼這個簡單的序言功能失敗?
- 14. 是什麼在這兩個程序
- 15. 爲什麼我的項目調用另一個項目代碼?
- 16. 爲什麼這個Github項目將字符串轉換爲bool?
- 17. 爲什麼這個ListView只顯示10個項目?
- 18. 這兩個DIV爲什麼不對齊?
- 19. 這兩個功能爲什麼不同?
- 20. 爲什麼忽略這兩個位置?
- 21. @property和@synthesize:爲什麼這兩個?
- 22. 爲什麼這個迭代div兩次?
- 23. 這兩個地塊爲什麼不同?
- 24. 這兩個程序哪個更好,爲什麼?
- 25. 這個C++程序爲什麼會導致系統崩潰?
- 26. 爲什麼Gradle認爲我的'庫'目錄是一個項目
- 27. 爲什麼這個cron條目執行兩次?
- 28. 這段代碼爲什麼只添加一個列表項目一次?
- 29. 爲什麼這隻允許一個類型不是兩個? php
- 30. 序言 - 這是什麼邏輯
您可以測試統一運算符(=)/ 2如何以'?[a,b,c,d] = [a,b | T]表現。 T = [c,d] .'。沒有雙重名單! – CapelliC