My answer到類似的問題Intersection and union of 2 lists可能是你的興趣。
與此處發佈的其他答案和there不同,我建議的實現邏輯上是純粹的和單調的,這使得它在泛化/專業化方面更加通用和強大。
首先,讓我們看看它是否與您在上面給了查詢工作:
?- As = [la_defense,etoile,chatelet,nation],
Bs = [auber,chatelet,hotel_de_ville,nation],
list_list_intersection(As,Bs,Xs).
As = [la_defense, etoile, chatelet, nation],
Bs = [auber, chatelet, hotel_de_ville, nation],
Xs = [chatelet, nation].
但是,如果我們寫在不同的(但邏輯上等同)的方式查詢?
?- As = [_,_,_,_],
Bs = [_,_,_,_],
list_list_intersection(As,Bs,Xs),
As = [la_defense,etoile,chatelet,nation],
Bs = [auber,chatelet,hotel_de_ville,nation].
As = [la_defense, etoile, chatelet, nation],
Bs = [auber, chatelet, hotel_de_ville, nation],
Xs = [chatelet, nation].
隨着list_list_intersection/3
我們得到相同的結果。
現在,讓我們考慮使用內置intersection/3
,這是在另一個答案建議。關於泛化也是intersection/3
強健嗎?
?- As = [_,_,_,_],
Bs = [_,_,_,_],
intersection(As,Bs,Xs),
As = [la_defense,etoile,chatelet,nation],
Bs = [auber,chatelet,hotel_de_ville,nation].
false.
不!intersection/3
失敗,儘管它在邏輯上等價的查詢成功了,這表明intersection/3
的執行是而非單調。
底線:intersection/3
是更難使用權比list_list_intersection/3
;它迫使你在使用它時考慮聲明性程序方面的和。
謝謝,它完美的作品^^所以如果成員是真的,LI = [X | R] ...被執行?我不知道「 - >」:/ – toshiro92