簡體   English   中英

Prolog - 返回嵌套列表中唯一數字的列表

[英]Prolog - return list of unique numbers in nested lists

大家好,我正在嘗試自己學習 Prolog,但我一直在嘗試創建一個函數,該函數采用嵌套列表並返回僅包含唯一數字的列表。 所以 unique(L,T) 意味着 T 是從 L 中提取的唯一數字列表。

列表的格式如下所示,其中 c 后面總是跟一個 int:

[a,[b,[c,5],[c,3]],[c,4]]

應該返回 true 的示例:

unique([b,[c,4],[c,3]], [4,3])

這是我嘗試過的代碼,但是當我嘗試查詢它時它只是返回一個空列表:

unique([],[]).
unique([X|XS],[X|L]) :-
 integer(X),
 unique(XS,L).
unique([X|XS],L) :-
 \+integer(X),
 unique(XS,L).

我也嘗試過各種其他解決方案,但似乎不斷得到一個空列表作為輸出或只是“假”。 我將不勝感激任何形式的指導!

這段代碼沒有考慮到列表是嵌套的; 它應該成功(例如):

unique([b,c,4,c,3],[4,3]).

您將需要一個列表頭是一個列表的情況,遞歸地找到其中的整數,並將您找到的內容附加到您為列表尾部找到的內容中。

展平列表,過濾它以獲取數字,排序以使其唯一:

?- L = [a,[b,[c,5],[c,3]],[c,4]], flatten(L, F), include(number, F, N), sort(N, Unique_numbers).
L = [a, [b, [c, 5], [c, 3]], [c, 4]],
F = [a, b, c, 5, c, 3, c, 4],
N = [5, 3, 4],
Unique_numbers = [3, 4, 5].

如果您想保持原始順序,則無法排序,但是 SO 上有很多答案會告訴您如何操作。

如果您不想使用庫謂詞,請查看它們的定義方式( flatten/2include/2 )並為您自己的解決方案獲取靈感。

暫無
暫無

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

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