2017-10-06 47 views
1

所以,我在找的是基本上是這樣的:如何找到列表中發現某個原子的第一次出現的列表?

findatom(A, L, NL), 
with inputs: 
A = -, %sought after atom 
L = [[1,2,3], [2,-,3], [1,2,3]] %list of lists 
and then it outputs: 
NL = [2,-,3] %the first list containing the sought after atom 

怎麼可能呢?我試過這個:

/*Append something (dummy variable) with the first occurence of the 
sought after atom (L), then output everything after the found atom (L). */ 

     findatom(L, List, NewList) :- 
      append(_, [L|T], List), 
      NewList = [L|T]. 

這隻適用於存在原子列表而不是列表列表的情況。我怎樣才能擴展它以使其適用於列表清單?

+0

雖然追加可以用最驚人的方式使用,但我不完全清楚爲什麼你認爲使用它? –

回答

1

讓我們用文字做這個:findatom(A, L, NL)找到列表NLL這樣A就在裏面。讓我們用Prolog謂詞替換那些單詞:findatom(A, L, NL)找到L的member NL,使得ANL的成員。

findatom(A, L, NL) :- 
    member(NL, L),  % find an item NL in L 
    memberchk(A, NL). % that contains A 

這裏使用memberchk的好處在於,它是確定性的,所以你不必擔心會多個錯誤的解決方案。

相關問題