Prolog检查两个值是否是列表的成员

时间:2019-11-09 14:28:25

标签: prolog

我正在尝试学习Prolog,我问自己是否可以使用以下谓词:

  • member_of,如果给定元素是提供的列表的一部分,则为true
  • member_8,如果8是提供的列表的一部分,则为true
  • member_7_or_8,如果提供的列表中包含7或8,则为true
  • member_7_and_8,如果提供的列表中有7和8是poart,则为true

我能够解决除最后一个谓词以外的所有谓词。你能给我一个解决方法的提示吗?

member_of(E,[E|_]). 
member_of(E,[_|R]):-member(E,R).

member_8([8|R]).
member_8([_|R]):-member_8(R).

member_7_or_8([7|R]).
member_7_or_8([8|R]).
member_7_or_8([_|R]):-member_7_or_8(R).

1 个答案:

答案 0 :(得分:0)

解决方案是拥有一个“帮助”谓词,该谓词使您可以检查元素是否为给定列表的成员。借助该谓词,可以检查是否存在多个元素。例如

member_of(E,[E|_]). 
member_of(E,[_|R]):-member(E,R).
member_7_and_8(L):-member_of(7,L),member_of(8,L).