所以我要找的基本上是这样的:
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)
在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
的专业人士认为这是确定性的,因此您不必担心会遇到多个虚假解决方案。