Prolog-如何检查列表是否包含特定项
1/3,2/3,2/3,2/5,5/5,5/1,,[1/3,2/5,5/5,3/2,4/4,4/4,5/1,5/1,,[1/5,2/5,2/5,2/5,2/5,2/5,5/5,5/5,5/1/5,2/5,2/3,3,3/3,3,3,3/1/1,3,3,3,3,3,3/1,3,3,3,3,3/1,3,3,3,3,3,3,3,3,3/1,1,1,1,1,4,4,4,2,2,2,2,2,4,4,2,2,2,2/1,2,2,2,2,2,2,2,2,2/1,2,2,2,2,2,3,3,2 4/2,5/5],[1/2,2/4,3/1,4/3,5/5]] 我只想返回包含特定项的列表列表,例如3/5 我尝试编写一个如下所示的函数:Prolog-如何检查列表是否包含特定项,prolog,Prolog,1/3,2/3,2/3,2/5,5/5,5/1,,[1/3,2/5,5/5,3/2,4/4,4/4,5/1,5/1,,[1/5,2/5,2/5,2/5,2/5,2/5,5/5,5/5,5/1/5,2/5,2/3,3,3/3,3,3,3/1/1,3,3,3,3,3,3/1,3,3,3,3,3/1,3,3,3,3,3,3,3,3,3/1,1,1,1,1,4,4,4,2,2,2,2,2,4,4,2,2,2,2/1,2,2,2,2,2,2,2,2,2/1,2,2,2,2,2,3,3,2 4/2,5/5]
include([X/Y|Rest],I,J):-
X=:=I,
Y=:=J,
include(Rest,I,J).
pick([Item|Rest],I,J,Final):-
include(Item,I,J),
pick(Rest,I,J,[Item|R]).
这样我就可以查询pick(M,3,5,F),使F包含其中有3/5的列表。我写的函数不能正常工作,你能帮我修复它吗 正如潜伏者所说,使用member,不要忘记基本情况
foo([],_,F).
foo([H|T],Item,[H|F]):-
member(Item, H),
foo(T,Item,F).
foo([_|T],Item,F) :-
foo(T,Item,F).
正如潜伏者所说,使用成员,不要忘记基本情况
foo([],_,F).
foo([H|T],Item,[H|F]):-
member(Item, H),
foo(T,Item,F).
foo([_|T],Item,F) :-
foo(T,Item,F).
如果要检查列表是否包含成员,请使用
memberchk/2
。因此,如果I/J
在列表Item
中,则memberchk(I/J,Item)
成功。您的include/3
谓词没有基本大小写,并尝试确保给定列表的每个元素都是I/J
,因此它将始终失败。如果要检查列表是否包含成员,请使用memberchk/2
。因此,如果I/J
在列表Item
中,则memberchk(I/J,Item)
成功。您的include/3
谓词没有基本大小写,并尝试确保给定列表中的每个元素都是I/J
,因此它将始终失败。