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

Prolog 序言检查两个值是否为列表的成员,prolog,Prolog,我正在尝试学习Prolog,我问自己是否可能有以下谓词: 如果给定元素是所提供列表的一部分,则其成员_为true 如果8是所提供列表的一部分,则成员_8为真 如果7或8是所提供列表的一部分,则成员7或8为真 如果7和8是所提供列表的一部分,则成员_7_和_8为真 除了最后一个谓词外,我能解所有的谓词。你能告诉我怎么解决这个问题吗 member_of(E,[E|_]). member_of(E,[_|R]):-member(E,R). member_8([8|R]). member_8([

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

  • 如果给定元素是所提供列表的一部分,则其成员_为true
  • 如果8是所提供列表的一部分,则成员_8为真
  • 如果7或8是所提供列表的一部分,则成员7或8为真
  • 如果7和8是所提供列表的一部分,则成员_7_和_8为真
除了最后一个谓词外,我能解所有的谓词。你能告诉我怎么解决这个问题吗

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).
解决方案是使用一个“helper”谓词,它允许您检查元素是否是给定列表的成员。借助该谓词,可以检查是否存在多个元素。例如

member_of(E,[E|_]). 
member_of(E,[_|R]):-member(E,R).
member_7_and_8(L):-member_of(7,L),member_of(8,L).
解决方案是使用一个“helper”谓词,它允许您检查元素是否是给定列表的成员。借助该谓词,可以检查是否存在多个元素。例如

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

你不认为8号成员是的一个特殊情况吗?您应该使用的成员_来解成员_8。对于成员_7_或_8,请看一下“;”的含义在开场白中你是对的。我本可以使用的member_,但为了明确了解Prolog是如何工作的,我决定为这些“任务”实现不同的谓词。谢谢你对“;”的提示,但据我所知,“;”让我们来实现“或”。这无助于我解决问题,还是我在监督某件事?我不同意。如果成员_工作良好,您必须使用它来解决其余的任务,所以“;”他们是你的朋友!啊,现在我明白你的意思了。有时。。。所以我想出了成员7和成员8(L):-成员7(L),成员8(L)。你明白了!成员7或成员8的设计相同。您不认为成员8是成员8的特殊情况吗?您应该使用的成员_来解成员_8。对于成员_7_或_8,请看一下“;”的含义在开场白中你是对的。我本可以使用的member_,但为了明确了解Prolog是如何工作的,我决定为这些“任务”实现不同的谓词。谢谢你对“;”的提示,但据我所知,“;”让我们来实现“或”。这无助于我解决问题,还是我在监督某件事?我不同意。如果成员_工作良好,您必须使用它来解决其余的任务,所以“;”他们是你的朋友!啊,现在我明白你的意思了。有时。。。所以我想出了成员7和成员8(L):-成员7(L),成员8(L)。你明白了!构件7或8的设计相同。