如何在列表中找到列表,其中找到了某个原子的第一个出现位置?

时间:2017-10-06 12:44:12

标签: list prolog

所以我要找的基本上是这样的:

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].

仅当存在原子列表而不是列表列表时才有效。我怎样才能扩展它以使其适用于列表列表?

1 个答案:

答案 0 :(得分:1)

让我们用文字说明这一点:findatom(A, L, NL)NL中找到列表L,使A在其中。让我们用Prolog谓词替换这些单词:findatom(A, L, NL)找到L的member NL,使A成为NL的成员。

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

使用memberchk的专业人士认为这是确定性的,因此您不必担心会遇到多个虚假解决方案。