簡體   English   中英

Prolog交集列表

[英]Prolog intersection list of lists

我想在序言中創建列表的交集。 (矩陣,列表作為單元格)

當行數和列數相同時(矩形),我只需要處理這種情況。 列表是有序的,並且不包含任何重復的元素(它們是ord_sets)。

我該怎么辦?

示例:(3行3列)

A:
[[[1,2],[3,2,1],[3,4,5]],
[[1,2],[3,2,1],[3,4,5]],
[[1,2],[3,2,1],[3,4,5]]]
B:
[[[1],[3,2,1],[3,4,5]],
[[1,2],[2,1],[3,4]],
[[1,2],[3,2,1],[3,9,10,4,5]]]
C:
[[[1],[3,2,1],[3,4,5]],
[[1,2],[2,1],[3,4]],
[[1,2],[3,2,1],[3,4,5]]]

感謝您的幫助!

大多數Prolog解釋器已經有一個謂詞可以計算兩個列表之間的交集: intersection/3 例如:

?- intersection([3,2,1], [3,9,10,4,5], R).
R = [3].

我們可以使用maplist/3處理此類列表的整行:

?- maplist(intersection, [[1,2],[3,2,1],[3,4,5]], [[1],[3,2,1],[3,4,5]], C).
C = [[1], [3, 2, 1], [3, 4, 5]].

通過使用另一個maplist/3我們可以處理矩陣:

?- maplist(maplist(intersection),[[[1,2],[3,2,1],[3,4,5]], [[1,2],[3,2,1],[3,4,5]], [[1,2],[3,2,1],[3,4,5]]], [[[1],[3,2,1],[3,4,5]],[[1,2],[2,1],[3,4]],[[1,2],[3,2,1],[3,9,10,4,5]]], C).
C = [[[1], [3, 2, 1], [3, 4, 5]], [[1, 2], [2, 1], [3, 4]], [[1, 2], [3, 2, 1], [3, 4, 5]]].

因此,我們可以使用以下方法進行處理:

intersect_matrix(A, B, C) :-
    maplist(maplist(intersection), A, B, C).

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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